4.2.1朴素模式匹配算法




int Index(SString S,SString T){
int i = 1,n=StrLength(S),m=StrLength(T);
SString sub;
while(i<=n-m+1){
SubString(sub,S,i,m);
if(String(sub,T)!=0) ++i;
else return i;
}
return 0;
}





#include<stdio.h>
int Index(SString S,SString T){
int i=1,j=1;
while(i<=S.length && j<=T.length){
if(S.ch[i]==T.ch[j]){
++i;++j
}
else{
i=i-j+2;
j=1;
}
}
if(j>T.length)
return i-T.length;
else
return 0;
}


4.2.2 KMP算法













#include<stdio.h>
int Index_KPM(SString S,SString T,int next[]){
int i=1,j=1;
while(i<=S.length && j<=T.length){
if(j==0||S.ch[i]==T.ch[j]){
++i;++j
}
else
j=next[j];
}
if(j>T.length)
return i-T.length;
else
return 0;
}









