kmp算法。有没有大佬看看哪里错了。谢谢
#include<stdio.h>//函数中的参数数组和指针还是有点区别的。#include<string.h>
void Next(char ch[],int next[]){
int i=1,j=0;
next[1]=0;
int lenth=strlen(ch);
while(i<=lenth){
if(0==j || ch[j]==ch[i]){
i++;
j++;
next[i]=j;
}else
j=next[j];
}
}
int Index_kmp(char S[],char T[],int pos,int next[]){
int i=pos;
int j=1;//此时的等于一是从下标为一的位置开始的。
int lenS=strlen(S);
int lenT=strlen(T);
while(j<=lenS && i<=lenT){
if(0==j || S[j]==T[i]){//此时0==j是一个界限,必须有。
++i;
++j;
}else
j=next[j];
}
if(j>lenS)
return (i-lenS);//为什么是返回值这样的因为可以准确返回开始匹配的位置
else
return 0;
}
int main(){
int next[11];
int i=1;
char S[]="0aa";//第一个字符用不上,从s[1]='a';开始。
char T[]="01a0aabcdabcadddfljlf";
Next(S,next);
printf("%d",Index_kmp(S,T,i,next));
printf("hahahahhahahah");
}