1. 程式人生 > 其它 >串的匹配模式

串的匹配模式

//串的模式匹配
//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); }

**