串的匹配模式
阿新 • • 發佈:2022-12-12
//串的模式匹配 //1.樸素的模式匹配演算法 int Index1(char S[], char P[], int pos) {//查詢並返回串P在主串S中從pos位置開始的位置,否則返回-1 int i, j, slen, plen; i = pos; j = 0; slen = strlen(S); plen = strlen(P); while (i < slen && j < plen) { if (S[i] == P[j]){ ++i; ++j; } else{ i = i - j + 1;//主串位置回退 j = 0; } } if (j == plen) return i - plen; return -1; } //2.改進的模式匹配演算法(KMP演算法) void GetNext(char p[], int next[]) { int i, j, len; i = 0; j = -1; len = strlen(p); next[0] = -1; while (i < len) {if (-1 == j || p[i] == p[j]) { ++i; ++j; next[i] = j; } else { j = next[j]; } } } int Index_KMP(char S[], char P[], int pos, int next[]) { int i, j, slen, plen; i = pos; j = 0; slen = strlen(S); plen = strlen(P);while (i < slen && j < plen) { if (-1 == j || S[i] == P[j]) { ++i; ++j; } else { j = next[j]; } } if (j == plen) return i - plen; return -1; } void main() { char* s = "ababcdsfds"; char* p = "abab"; int d = Index1(s, p, 0); const int len = strlen(s); int next[5]; GetNext(p, next); int d2 = Index_KMP(s, p, 0, next); printf("%d\n%d", d,d2); }
**