串的模式匹配
暴力匹配算法
//思想:从主串中,每次用模式串长度个元素与模式串进行比较,用k记录当前开始的位置。若其中有一个不匹配,则K+1,继续进行匹配。若匹配成功,则返回当前k值。
int Index(SString S,SString T){
//S为主串,T为模式串
int i=j=k=1; //i,j为进行匹配所用到的,k为记录当前主串开始匹配的位置
while(i<=S.length && j<=T.length){
if(S.ch[i]==T.ch[j]){
i++;
j++;
}else{
//不匹配,各种变量回归
k++;
i=k;
j=1;
}
}
//结束后,若j>T.length,说明成功,否则不成功
if(j>T.length){
return k;
}
return 0;
}
KMP算法
int Index_KMP(SString S,SString T,int next[]){
int i=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;
}
return 0;
}