int KMPIndex1(SqString s,SqString t) /*修正的KMP算法*/ { int nextval[MaxSize],i=0,j=0; GetNextval(t,nextval); while (i<s.len && j<t.len) { if (j==-1 || s.data[i]==t.data[j]) { i++;j++; } else j=nextval[j]; } if (j>=t.len) return(i-t.len); else return(-1); }
char *strStr(char *haystack, char *needle) { int hLen = strlen(haystack), nLen = strlen(needle); int i = 0, j = 0; int *next = (int*)malloc(sizeof(int)*nLen); GetNextval(needle, next); while(i<hLen&&j<nLen) { if(j == -1 || haystack[i] == needle[j]) { i++; j++; } else { j = next[j]; } } if(j==nLen) return haystack + i - j; else return nullptr; }