void preKmp(char*x, int m, int kmpNext[]) { int i, j; i =0; j = kmpNext[0] =-1; while (i < m) { while (j >-1&& x[i] != x[j]) j = kmpNext[j]; i++; j++; if (x[i] == x[j]) kmpNext[i] = kmpNext[j]; else kmpNext[i] = j; } } void KMP(char*x, int m, char*y, int n) {//x为模式串,m为其长度,y为主串,n为其长度 int i, j, kmpNext[MAXSIZE];//kmpNext数组存放next函数值 /**//* Preprocessing */ preKmp(x, m, kmpNext); /**//* Searching */ i = j =0; while (j < n) { while (i >-1&& x[i] != y[j]) i = kmpNext[i]; i++; j++; if (i >= m) { OUTPUT(j - i); i = kmpNext[i]; } } }