kmp算法
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct str
{
char ch[MAXSIZE];
int length;
}str;
int Next(str ch)//求next函数
{ int i=1,j=0,next[MAXSIZE];
next[1]=0;
while(i<ch.length)
{
if(j==0||ch.ch[i]==ch.ch[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
return next[i];
}
void enstr(str ch)//输入字符串
{ int i;
char *p=ch.ch;
gets(p);
while(*p)
{
i++;
p++;
}
ch.length=i;
}
int kmp(str s,str t,int pos)
{ int i,j=1;
i=pos;
while(i<=s.length&&j<=t.length)
{
if(j==0||s.ch[i]==t.ch[j])
{
i++;
j++;
}
else
j=Next(t);
}
if(j>t.length)
return i-t.length;
else
return 0;
}
main()
{ str s,t;
int next[MAXSIZE],pos,pos2;
enstr(s);
enstr(t);
scanf("%d",&pos);
pos2=kmp(s,t,pos);
printf("%d",pos2);
}
求高手们看看,改一下错误,谢谢!