c语言实现KMP算法遇上的问题
c语言实现KMP算法遇上的问题:数据结构课上的题,不知道错在哪里,请大虾帮忙看下:#include <stdio.h>
#include <string.h>
#define MAXSTRLEN 255
typedef char SString[MAXSTRLEN+1];
void main()
{
SString s,t;
int pos;
void get_next(SString t,int next[]);
int Index_KMP(SString s,SString t,int pos,int next[]);
int next [MAXSTRLEN+1];
strcpy (s+1,"This is an apple.");
strcpy (t,"is");
s[0]=strlen(s+1);
t[0]=strlen(t+1);
get_next(t,next);
pos=Index_KMP(s,t,pos,next);
if(pos==0)
printf ("匹配失败");
else
printf ("%d",pos);
}
void get_next(SString t,int next[])
{
int i,j;
i=1; next[1]=0; j=0;
while (i<t[0])
{
if (j==0||t[i]==t[j])
{
++i; ++j;
next[i]=j;
}
else
j=next[j];
}
}
int Index_KMP(SString s,SString t,int pos,int next[])
{
int i,j;
i=pos; j=1;
while (i<=s[0]&&j<=t[0])
{
if (j==0||s[i]==t[j])
{++i;++j;}
else j=next[j];
}
if (j>t[0])
return i-t[0];
else return 0;
}