C语言中KMP算法的代码实现
#include<stdio.h>
#include<string.h>
#define MAXSTRLEN 255
void get_next(char *T,int *next)
{
int i=1,j=0;
next[1]=0;
while(i<T[0])
{
if(j==0||T[i]==T[j])
{
++i;++j;
next[i]=j;
}
else j=next[j];
}
}
int kMP(char *S,char *T,int pos,int *next)
{
int 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 caculate(char *S,char *T)
{
int pos;
printf("which position you want begin:");
scanf("%d",&pos);
int index;
int next[20];
printf("================ kMP ==============\n");
get_next(T,next);
index=kMP(S,T,pos,next);
if(index)printf("index=%d\n",index);
else printf("null\n");
}
void input(char *S,char *T)
{
printf("enter char in main string:");
scanf("%s",S+1);
S[0]=strlen(S+1);
fflush(stdin);
printf("enter char in substring:");
scanf("%s",T+1);
T[0]=strlen(T+1);
caculate(S,T);
}
void set_variable()
{
char Str[MAXSTRLEN+1];
char Stp[MAXSTRLEN+1];
input(Str,Stp);
}
void main()
{set_variable();}
这是在自己做课设的时候写的KMP算法,后面的设置变量可以做适当的修改。