刚学了KMP算法,自己写一段代码,不知对不对
void kmp(char *s1,char *s2){
int p[1000],i,j,len1,len2;
len1=strlen(s1); len2=strlen(s2);
p[0]=0; j=0;
for(i=1;i<len2;i++)
{
while(j>0&&s2[i]!=s2[j]) j=p[j];
if(s2[j]==s2[i]) j++;
p[i]=j;
}
j=0;
for(i=0;i<len1;i++)
{
while(j>0&&s2[j]!=s1[i]) j=p[j-1];
if(s2[j]==s1[i]) j++;
if(j==len2)
{
printf("%d\n",i-len2+2);
j=p[j-1];
}
}
/*用于检验结果
for(i=0;i<len2;i++)
printf("%d ",p[i]);
printf("\n");
for(i=0;i<len2;i++)
printf("%c ",s2[i]);
printf("\n\n");
printf("%s\n",s1);
for(i=1;i<=len1;i++)
printf("%d",i%10);
printf("\n");
*/
}