首页 > 代码库 > 串的模式匹配

串的模式匹配

1.BF模式匹配算法:

 1 int Index(SString S, int pos, SString T)
 2 {
 3     int i = pos, j = 1;
 4     while (i < S.len&&j < T.len)
 5     {
 6         if (S.ch[j] == T.ch[j])
 7         {
 8             i++;
 9             j++;
10         }
11         else
12         {
13             i = i - j + 2;
14             j = 1;
15         }
16     }
17     if (j > T.len) return i - T.len;
18     else return 0;
19 }

 2.KMP算法

 1 int Index_KMP(SString S,int pos,SString T)
 2 {
 3     int i = pos, j = 1;
 4     while (i <= S.len&&j <= T.len)
 5     {
 6         if (j == 0 || S.ch[i] == T.ch[j])
 7         {
 8             ++i;
 9             ++j;
10         }
11         else j = next[j];
12     }
13     if (j > T.len) return i - T.len;
14     else return 0;
15 }

3.next算法

 1 void Get_Next(SString T, int next[])
 2 {
 3     int j = 1, k = 0;
 4     next[1] = 0;
 5     while (j < T.len)
 6     {
 7         if (k == 0 || T.ch[j] == T.ch[k])
 8         {
 9             ++j;
10             ++k;
11             next[j] = k;
12         }
13         else k = next[k];
14     }
15 }

4.nextval算法

 1 void Get_NextVal(SString T, int next[], int nextval[])
 2 {
 3     int j = 1, k = 0;
 4     Get_Next(T,next);  //获得next的值
 5     nextval[1] = 0;
 6     while (j < T.len)
 7     {
 8         k = next[j];
 9         if (T.ch[j] == T.ch[k])
10             nextval[j] = nextval[k];
11         else
12             nextval[j] = next[j];
13         j++;
14     }
15 }

 

串的模式匹配