KMP算法主要是对两个字符串匹配问题发明的算法,是D.E.Knuth、J.H.Morris和V.R.Pratt三位前辈的研究结果。
代码如下:
#include <stdio.h>
#include <stdlib.h>
1.获取next数组:
typedef char* String;
void get_next(String T,int next[10]){
int j=0,i=1;
next[1]=0;
while(i<T[0]){
if(j==0 || T[i]==T[j]){
i++;
j++;
if(T[i]!=T[j]){
next[i]=j;
}
else{
next[i]=next[j];
}
}
else{
j=next[j];
}
}
}
2.KMP实现:
//返回子串T在主串S中第pos个字符之后的位置
int Index_KMP(String S,String T,int pos){
int next[10];int i=pos;int j=1;
get_next(T,next);
while(i<=S[0] && j<=T[0]){
if(S[i]==T[j] || j==0){
i++;
j++;
}
else{
j=next[j];
}
}
if(j>T[0]){
return i-T[0];
}
else{
return 0;
}
}
3.主函数:
int main(){
char str[10]=" aaaba";
str[0]=5;
char str1[10]=" aba";
str1[0]=3;
int pos=Index_KMP(str,str1,1);
printf("%d",pos);
return 0;
}