主题:请各位大侠帮忙找一下KMP算法小程序的错误,谢啦!
这是数据结构中的KMP算法,但是搜不到模式串。并且经Next函数处理后,不管输入什么模式,next[100]的元素总是0、1、2、3、4、、、、、
请各位大侠帮帮忙改一下
#include<stdio.h>
#include<string.h>
int Next(int next[],char temp[]);
int main(void)
{ int next[100],i=0,j=0,k,l,m,flag=1;
char temp[100],c[5][100];
printf("请输入5个字符串");
for(k=0;k<5;k++)
gets(c[k]);
printf("查找:");
gets(temp);
l=strlen(temp);
Next(next,temp);
while(k<5)
{ m=strlen(c[k]);
while(i<=m&&j<=l)
{ if(j==0||c[k][i]==temp[j])
{ i++;
j++;
}
else j=next[j];
}
if(j>l)
{ printf("找到了:\n%s",c[k]);
flag=0;
}
k++;
}
if(flag)
printf("找不到");
for(i=0;i<l;i++)
printf("%d",next[i]);
getchar();
getchar();
return 1;
}
int Next(int next[],char temp[])
{ int i=0,j=0,l;
l=strlen(temp);
next[0]=0;
while(i<l)
{ if(j==0||temp[i]==temp[j])
{ i++;
j++;
next[i]=j;
}
else j=next[j];
}
return 1; }
请各位大侠帮帮忙改一下
#include<stdio.h>
#include<string.h>
int Next(int next[],char temp[]);
int main(void)
{ int next[100],i=0,j=0,k,l,m,flag=1;
char temp[100],c[5][100];
printf("请输入5个字符串");
for(k=0;k<5;k++)
gets(c[k]);
printf("查找:");
gets(temp);
l=strlen(temp);
Next(next,temp);
while(k<5)
{ m=strlen(c[k]);
while(i<=m&&j<=l)
{ if(j==0||c[k][i]==temp[j])
{ i++;
j++;
}
else j=next[j];
}
if(j>l)
{ printf("找到了:\n%s",c[k]);
flag=0;
}
k++;
}
if(flag)
printf("找不到");
for(i=0;i<l;i++)
printf("%d",next[i]);
getchar();
getchar();
return 1;
}
int Next(int next[],char temp[])
{ int i=0,j=0,l;
l=strlen(temp);
next[0]=0;
while(i<l)
{ if(j==0||temp[i]==temp[j])
{ i++;
j++;
next[i]=j;
}
else j=next[j];
}
return 1; }