问题:写函数find(char *s1 , char *s2),函数find()查找串s中是否包含词word。约定串中的词由1个或1个以上空白符分隔。
代码:
#include <stdio.h>
int find(char *s1 , char *s2)
{
int flag=1,i=0,j=0;
for (;*s1!='\0';s1++)
{if(*s1==*s2)
{for(;*s2!='\0';s1++,s2++)
if (*s1!=*s2)
flag=0;}}
if (flag==1) return 1;
else return 0;
}
int main()
{
char s1[50],s2[50];
gets(s1);
gets(s2);
if (find(s1,s2)==1)
printf("Y");
else printf("N");
return 0;
}
想法是先检测到s1和s2第一个字符重复的位置,然后s1和s2同步对比下去,直到s2走完。flag做标志。最后测试的时候只会输出Y不会输出N,不清楚是什么原因。求指教!
如果我没理解错的话,你的题目是要求s1中有无等于s2的子串。
你的代码应该是能够得出“N”的,只是你的测试样例都恰好避开了,输入“12 13”就会得到“N”。
你的代码问题:
int find(char *s1, char *s2)
{
for (; *s1 != '\0'; s1++)
{
if (*s1 == *s2)//遍历s1找到等于s2第一个字符的位置
{
int flag = 1;
char*p1=s1,*p2 = s2;//不要直接用s1和s2,不然你遍历后s1和s2的指向都变了
for (; *p1 != '\0'&&*p2 != '\0'; p1++, p2++)
if (*p1 != *p2) {//有一位不相同就可以脱离循环了,没必要再遍历浪费时间
flag = 0;
break;
}
if (flag == 1&&*p2)//子串完全和s2相同,如果只是flag=1是不够的,可能p2还没遍历完
return 1;
}
}
return 0;
}
能给一下你的测试样例截图吗
我的测试是没有问题的