C语言一个非常奇怪的问题。大神们来看看。。。
//下面是我写的测试KMP算法的程序。问题在KMP算法注释中。。。。。。。。。#include<stdio.h>
#include<string.h>
int next[10]={0};
void findnextal(char *s)
{
int i=0,k=-1,len;
len=strlen(s)-1;
next[0]=-1;
while(i<len)
{
while(k==-1||s[i]==s[k])
{
i++;
k++;
next[i]=k;
while(s[i]==s[k])
{
next[i]=next[k];
k=next[i];
}
}
k=next[k];
}
}
int kmp(char *s,char *p)
{
int i=0,j=0;
while(j!=strlen(p)&&i<strlen(s))//为什么把j!=strlen(p)改为j<strlen(p)程序就失效了?
{
if(s[i]==p[j]||j==-1)
{
i++;
j++;
}
else j=next[j];
}
if(j==strlen(p)) return i-strlen(p);
else return -1;
}
int main()
{
int i;
char str[100],s[100];
printf("input p:\n");
gets(str);
findnextal(str);
for(i=0;i<strlen(str);i++)
{
printf("%d ",next[i]);
}
printf("puts s:\n");
gets(s);
printf("%d ",kmp(s,str));
return 0;
}