KMP研究

来源:互联网 发布:云计算用什么语言 编辑:程序博客网 时间:2024/06/03 19:41

先把源码贴着,等下研究:

//copyright@2011 binghu and july  #include "stdio.h"  #include <string>  #include <iostream>  using namespace std;  void compute_prefix(int *next, char *p){inti, n, k;n = strlen(p);next[1] = next[0] = 0;k = 0;/* 第i次迭代开始之前,k表示next[i-1]的值 */for (i = 2; i <= n; i++) {for (; k != 0 && p[k] != p[i-1]; k = next[k]);if (p[k] == p[i-1]) k++;next[i] = k;}}void kmp_match(char *text, char *p, int *next){int m, n, s, q;m = strlen(p);n = strlen(text);q = s = 0;/* q表示上一次迭代匹配了多少个字符,   s表示这次迭代从text的哪个字符开始比较 */ while (s < n) {for (q = next[q]; q < m && p[q] == text[s]; q++, s++);if (q == 0) s++;else if (q == m) {printf("pattern occurs with shift %d\n", s-m);}}}int main(){int next[101], n;char*p = "ca";char*text = "cacca";compute_prefix(next, p);kmp_match(text, p, next);return 0;}


原创粉丝点击