考试前设计KMP算法代码,考试就不用在自己笔算next[i]的字符数组了!!!悔恨
使用的是C语言,不过此处C语言和c++好像结果是一样的
#include<stdio.h>
void next1(char f[],int length)
{
int next[300];//容量300;
int i=1,j=0;next[1]=0;
while(i<length)//next的长度也是length-1
{
if(j==0||f[i]==f[j]){i++;j++;next[i]=j;}
else
j=next[j];
}
for(i=1;i<length;i++)
printf("%d ",next[i]);
printf("\n");
}
void nextval1(char f[],int length)
{
int i=1,j=0;
int nextval[300];
nextval[i]=j;
while(i<length)
{
if(j==0||f[i]==f[j])
{
i++;j++;
if(f[i]!=f[j])
nextval[i]=j;
else
nextval[i]=nextval[j];
}
else j=nextval[j];
}
for(i=1;i<length;i++)
printf("%d ",nextval[i]);
printf("\n");
}
int main()
{
char f[300];//模式串;
int length=1;
while(scanf("%c",&f[length])!=NULL&&f[length]!='\n')length++;//从1开始存储,而不是f[0];
f[length]='\0';
next1(f,length);
nextval1(f,length);
return 0;
}
超简单实用的程序,一定要提前写出来。