int Index_KMP(SString S,SString T,int pos){
//主串为S,模式串为T,从主串的第pos个字符开始匹配
int i=pos,j=1;
while(i<=S.length&&j<=T.length){
if(j==0||S.ch[i]==T.ch[j]){//j==0表示主串的第i个字符和模式串的第一个字符不等
++i;
++j;
}else{
j=next[j];
}
if(j>T.length) return i-T.length;
else return 0;
}
}
//计算next值
void get_next(SSTring T,int next[]){
//求模式串T的next值并存入数组next
int i=1,next[1]=0,j=0;
while(i<T.length){
if(j==0||T.ch[i]==T.ch[j]){
++i;
++j;
next[i]=j;
}else{
j=next[j];
}
}
}