#include <string.h> #include <stdio.h> void kmp() // pattern match { char pat[] = "abaabcac"; char text[] = "acabaabaabcacaabc"; int i, j, pLen = strlen(pat), tLen = strlen(text); int preVal[8]; preVal[0] = -1; i = 0, j = -1; printf ("preVal : %d ", preVal[0]); while (i < pLen-1) { if (j == -1 || pat[i] == pat[j]) { ++i; ++j; if (pat[i] != pat[j]) preVal[i] = j; else preVal[i] = preVal[j]; printf ("%d ", preVal[i]); } else { j = preVal[j]; } } printf ("/n"); i = 0, j = 0; while (j < pLen && i < tLen) { if (j == -1 || pat[j] == text[i]) { ++i; ++j; } else j = preVal[j]; } if (j == pLen) printf ("i = %d.", i); //puts (text+(i - pLen)); else printf ("not found!/n"); }