现在应该对了吧?
#include<stdio.h>
#include<string.h>
int search(char str1[],char str2[])
{ int i,j,t=0,k,bo;
for(i=0;i<strlen(str1);i++)
{k=i;bo=0;while(str1[k]==str2[0])
{for(j=0;j<strlen(str2);j++)
if(str1[k]!=str2[j]) {bo=1;break;}*********bo=1标记不满足条件
else k++;
if(bo==0) *********这里bo=0就代表满足条件,直接返回1.
return 1;
else break; ********bo=1不满足跳出while循环,进行下一步。
}
}
return(t);
}
main()
{ char str1[20],str2[20];
printf("Enter str1:");
gets(str1);
printf("Enter str2:");
gets(str2);
printf("%d",search(str1,str2));
}
你的代码:
#include<stdio.h>
#include<string.h>
int search(char str1[],char str2[])
{ int i,j,t=0;
for(i=0;i<strlen(str1);i++)
{while(str1[i]==str2[0])
{for(j=0;j<strlen(str2);j++)
if(str1[i]!=str2[j]) break;*********《1》***************
else i++; ********************《2》***********
t=1;
}
}
return(t);
}
main()
{ char str1[20],str2[20];
printf("Enter str1:");
gets(str1);
printf("Enter str2:");
gets(str2);
printf("%d",search(str1,str2));
}
你在《1》处的break只是跳出了for循环,其实应该同时要跳出while循环,要不然只要进入了while循环中,
那个t无论如何都是1了。如果是因为有一个不相等而执行《1》处跳出了循环,那i也应该改回原值。
如:
ababc
abc
按你的做法,在i=2,j=2时,执行了《1》,如果i没改回去,再执行下一步就是比较str1[3](也就是b)与str1[0](a)
显然就比较不出了。我用k就是解决这一点。
这样说不知你清楚了吗?