kmp的字符串的查找运行结果不对,求修改
/* Note:Your choice is C IDE */#include "stdio.h"
#include "string.h"
#define maxsize 100
struct string
{
char str[maxsize];
int length;
};
int str_len(struct string *a)
{
int i;
for(i=1;a->str[i]!='\0';i++);
return(i);
}
get_next(struct string a,int next[])
{
int j,k;
j=1,k=0;
next[1]=0;
while(j<a.length)
{
if(k==0||a.str[j]==a.str[k])
{j++;k++;next[j]=k;}
else{k=next[k];}
}
}
int chazhao(struct string a,struct string b,int next[])
{ int i,j;
i=1,j=1;
while(i<=a.length&&j<=b.length)
{
if(a.str[i]==b.str[j])
{i++;j++;}
else j=next[j];
}
if(j>=b.length)
return(i-b.length);
else
return(-1);
}
main()
{
struct string a,b;
int next[maxsize],k;
gets( a.str);
a.length=str_len( &a);
gets( b.str);
b.length=str_len( &b);
k=chazhao(a,b,next);
if(k==-1)
printf("不存在");
else
{
printf("存在");
printf("从%d个字符开始",k);
}
}