qq_32653757 2015-12-19 06:43 采纳率: 76.9%
浏览 2003
已结题

ACM简单的字符串匹配,但老是OJ通不过,求大神指点

Description
给出两个字符串S和T,请判断T是否为S的子串。本题请用"简单匹配法"来做。 使用strstr函数,判cheat

Input
第一行是一个整数N,说明有多少个测试用例。

接下来是N个测试用例,每个测试用例占2行:第一行是字符串S,第二行是字符串T,字符串中不含空格。 1 ≤ strlen(S) , strlen( T ) ≤ 10000

Output
对每个测试用例,输出一行结果:是否子串,是则输出"yes" ,否则输出 "no"

Sample Input
2
aabcdd
abc
aaaaaaaaaaaaa
aaaaaab

Sample Output
yes
no

 #include<stdio.h>
#include<string.h>
int main(void){
int t, j, id, g, d;
char s[10005], c[10005], cha;
scanf("%d", &t);
cha=getchar();
for(g=1; g<=t; g++){
gets(s);     gets(c);  

for(j=0,id=0,d=0; j<strlen(s); j++){
if(s[j]!=c[id])     id=0;
if(s[j]==c[id])     id++;
if(id==strlen(c))      {  d++; break;  }
}

if(d!=0)   printf("yes\n");
else       printf("no\n");
}
return 0;
}
  • 写回答

5条回答 默认 最新

  • DeepJoseph 2015-12-19 08:57
    关注

    for(j=0,id=0,d=0; j<strlen(s); j++){
    if(s[j]!=c[id]) id=0;
    if(s[j]==c[id]) id++;
    if(id==strlen(c)) { d++; break; }
    }
    你这个算法的逻辑有问题呀,你直接先把长串按步长为1,拆分成子串长度大小的几段字符串,
    假如
    m=len(longstr); n=len(shortstr)
    就是把longstr拆分成 m-n+1 个字符串,然后比较一下就行啦~

    你看这样可以不?

    评论

报告相同问题?

悬赏问题

  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿