作者在 2013-12-15 16:07:35 发布以下内容
以下是KMP算法,怎么讲文学研究助手的内容加进去
#include <stdio.h>
#include <string.h>#define Maxsize 100
int StrIndex_KMP(char *s,char *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;
}
void Get_next(char t[],int next[])
{
int i,j;
i=1;
j=1;
next[1]=0;
while(i<t[0])
{
if(j==0||t[i]==t[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
main()
{
char s[Maxsize],t[Maxsize];
int next[Maxsize],i;
printf("请输入存储内容: \n");
scanf("%s",s+1);
printf("请输入匹配的内容: \n");
scanf("%s",t+1);
s[0]=strlen(s+1);
t[0]=strlen(t+1);
Get_next(t,next);
i=StrIndex_KMP(s,t,1,next);
if(i==0)
printf("匹配失败!\n");
else
printf("匹配成功!\n首字符存储位置为%d\n",i);
}