KMP算法 关于求next[]
对kmp算法真心弄不明白。。。下面是我自己写的算法的实现,不能成功运行。。。。求指教。。。关键是在于对next[]的引用上。。。写的很乱。。。程序代码:
#include <stdio.h> #define M 100 int GetNext(char *t,int next[]); int StrIndex_KMP(char *s,char *t); int main() { char s[M]; char t[M]; printf("请输入目标串:\n"); gets(s); printf("请输入模式串:\n"); gets(t); StrIndex_KMP(s,t); } int GetNext(char *t,int next[]) { int i = 0, j = 0; next[1] = 0; while(i < strlen(t)) { if(j == 0 || t[i] == t[j]) { ++ i; ++ j; next[i] = j; return next[i]; } else j = next[j]; return j; } } int StrIndex_KMP(char *s,char *t) { int i = 2,j = 1; int next[M]; while(i <= strlen(s) && j <= strlen(t)) if(j == 0 || s[i] == t[j]) { i ++; j ++; } else j = GetNext(t,next); if(j > strlen(t)) printf("匹配成功!位置为%d\n",i - strlen(t)+1); else printf("匹配失败!\n"); return 0; }