m0_62746615 2022-11-03 11:26 采纳率: 85%
浏览 284
已结题

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

  • 写回答

5条回答 默认 最新

  • qfl_sdu 2022-11-03 13:02
    关注

    运行结果:

    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;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月3日
  • 已采纳回答 11月3日
  • 修改了问题 11月3日
  • 赞助了问题酬金15元 11月3日
  • 展开全部

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效