文学研究助手与模式匹配KMP算法
已知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);
}