现给定一段文本,请编写程序识别出连续的k个“edgnb”组成的字符串在该文本中出现了多少次。
输入格式:
第一行为1个整数T,表示数据组数。对于每组数据,第一行为1个字符串,表示给定的文本。第二行为1个整数k,含义如题目所述。(1≤T≤10。各组数据给定的字符串长度之和不超过10
5
,且字符串中只包含a-z的小写字母。k≥1且k×5小于给定字符串长度)。
输出格式:
对于每组数据输出一行,为1个整数,表示所求的出现次
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
int n,i;
scanf("%d",&n);
char a[10000];
for(i=1;i<=n;i++){
getchar();
gets(a);
int k;
scanf("%d",&k);
int sum=0;
int length;
length=strlen(a);
int j=1;
int g;
while(j<=length){
if(a[i]=='e'){
j++;
if(a[j]=='d'){
j++;
if(a[j]=='g'){
j++;
if(a[j]=='n'){
j++;
if(a[j]=='b'){
j++;
g=j/5;
sum=sum+1;
}
else break;
}
else break;
}
else break;
}
else break;
}
else break;
}
printf("%d",sum);
}
}
自己瞎写的,实在不会写,该怎么写
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
数据规模:
测试点0:5≤T≤10,400≤T个字符串长度之和≤500,k=1
测试点1:5≤T≤10,400≤T个字符串长度之和≤500,k≥1
测试点2:5≤T≤10,4000≤T个字符串长度之和≤5000,k≥1
测试点3:1≤T≤3,90000≤T个字符串长度之和≤100000,k≥1
测试点4:1≤T≤3,90000≤T个字符串长度之和≤100000,k≥1
运行结果:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int count(char* s, char* t, int k)
{
int i, j, x;
int flag = 1;
int len1 = strlen(s);
int len2 = strlen(t);
int len3 = len2 * k;
int nmb = 0; //次数
for (i = 0; i < len1 - len3 + 1; i++)
{
flag = 1;
for (j = 0; j < k; j++)
{
for (x = 0; x < len2; x++)
{
if (s[i + j * len2 + x] != t[x])
{
flag = 0;
break;
}
}
if (flag == 0)
break;
}
if (flag == 1)
nmb++;
}
return nmb;
}
int main()
{
int T, i, k[10];
char s[10][10000];
char t[] = "edgnb";
int nmb = 0;
scanf("%d", &T);
for (i = 0; i < T; i++)
{
scanf("%s %d", s[i],&k[i]);
}
for (i = 0; i < T; i++)
{
nmb = count(s[i], t, k[i]);
printf("%d\n", nmb);
}
return 0;
}
用strcmp去进行比较,直接遍历输入的字符串,依次截取str[i]到str[i+4]之间的字符去比较。
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
int main(){
int n,count=0;
char str[105];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s",str);
count=0;
for(int j=0;j<strlen(str)-4;j++){
char dest[5]={0};
strncpy(dest,str+j,5);
if(strcmp(dest,"edgnb")==0){
count++;
}
}
printf("%d\n",count);
}
return 0;
}
希望有帮助
https://b23.tv/qFioF9W