最近学习数据结构串的匹配,王道书上只有伪代码实现,于是尝试写出可以运行的c语言代码。
#include#include #include void Next(char* T,int* next){//求next数组 next[1]=0; next[2]=1; int j=1; int i=2; while(i if(j==0||T[j-1]==T[i-1]){ i++; j++; if(T[j-1]!=T[i-1]){ next[i]=j; } else{ next[i]=next[j]; } } else{ j=next[j]; } } } int KMP(char* S,char* T){//KMP算法实现 int next[10]; Next(T,next); int i=1; int j=1; while(i<=strlen(S)&&j<=strlen(T)){ if(j==0||S[i-1]==T[j-1]){ i++; j++; } else{ j=next[j]; } } if(j>strlen(T)){ return i-(int)strlen(T); } return -1; } int main(){ char* source; source= (char*)malloc(100*sizeof(char)); char* target; target= (char*)malloc(100*sizeof(char)); gets(source); gets(target); int i=KMP(source,target); printf("%d",i); return 0; }



