我感觉非常奇怪不能理解,请大神帮忙看看

C语言一个非常奇怪的问题。大神们来看看。。。
//下面是我写的测试KMP算法的程序。问题在KMP算法注释中。。。。。。。。。
#include
#include
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;
}

c kmp

1个回答

else j=next[j];
j并非单一递增,所以!=和<并不等价

zhuaaaaaazhu
zhuaaaaaazhu 没懂。。。
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问