#include const char EOS = '\0'; const int MAXPATLEN = 30; void computePrefix(char * pattern, int next[]) { int i,j; i = 0; j = next[0] = -1; do { if (j == -1 || pattern[i] == pattern[j]) { i ++; j ++; next[i] = ((pattern[j] == pattern[i]) ? next[j] : j); } else j = next[j]; } while (pattern[i] != EOS); } char * search(char * pat, char * text) { int next[MAXPATLEN]; int j; if (*pat == EOS) return text; computePrefix(pat, next); for (j = 0; (text != NULL) && (*text != EOS);) { if (j == -1 || pat[j] == *text) { text ++; j ++; if (pat[j] == EOS) return (text-j); } else j = next[j]; } return NULL; }