#include #define ALPHABETSZ 128 #define PATGRD 0xfe #define TXTGRD 0xff static int d[ALPHABETSZ]; void bmhInit(char *txt, int m, char *pat) { int i; /* initialize */ pat[0] = PATGRD; txt[0] = TXTGRD; for (i = 0; i < ALPHABETSZ; i ++) d[i] = m; for (i = 1; i < m; i++) d[pat[i]] = m - 1; } int bmhFind(int n, char *txt, int m, char *pat) { int i, j, k; int nmatch = 0; i = m; while (i <= n) { k = i; for (j = m; txt[k] == pat[j]; j--) k--; if (j == 0) { nmatch++; printf("%d \n", k); } i += d[txt[i]]; } return(nmatch); } /* End of File */