1. 实验目的
理解KMP算法。
2. 实验内容
实现KMP算法:上机编程实现KMP算法。测试用例:s=abcabcacb,t=abcac。
3. 实验过程
报告撰写具体要求:上述实验内容要求写出源代码及运行结果。
#include<stdio.h>
void Next(int next[],char n[])
{
int j=1;
next[1]=0;
int i=next[j];
while(j<5)
{
if(n[j]==n[i]||i==0)
{
j++;
i++;
next[j]=i;
}
else
{
i=next[i];
}
}
}
int KMP(char m[],char n[])
{
int next[6];
Next(next,n);
printf("next数组为:");
for(int i=1;i<6;i++)
{
printf("%d ",next[i]);
}
int i=1,j=1;
while(i<10&&j<6)
{
if(m[i]==n[j])
{
i++;
j++;
}
else
{
j=next[j];
i++;
}
}
return i-6;
}
int main()
{
char m[]={'\0','a','b','c','a','b','c','a','c','b'};
char n[]={'\0','a','b','c','a','c'};
printf("模式串为%s\n","abcabcacb");
printf("字串为%s\n","abcac");
int pos=KMP(m,n);
printf("\n第%d位匹配成功",pos);
return 0;
}