C语言,字符串程序问题

现给定一段文本,请编写程序识别出连续的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

运行结果:

img

代码:

#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

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632