KMP算法模板(C++实现)
2011-10-08 17:55
288 查看
/*参考《算法导论》 My Code:*/ #include <iostream> #include <cstdio> #include <string> using namespace std; const int N = 1000; string T, P; int pi ; void COMPUTER_PREFIX_FUNCTION(string P){ int m = P.length(), i, k; for(k = pi[0] = -1, i = 1; i < m; i++){ while(k > -1 && P[k+1] != P[i]) k = pi[k]; if(P[k+1] == P[i]) k++; pi[i] = k; } cout << "COMPUTER-PREFIX-FUNCTION" << endl; for(i = 0; i < m; i++){ cout << pi[i] << " "; } cout << endl << endl; } void KMP_MATCHER(string T, string P){ int i, n, m, k; n = T.length(); m = P.length(); for(k = -1, i = 0; i < n; i++){ while(k > -1 && P[k+1] != T[i]) k = pi[k]; if(P[k+1] == T[i]) k++; if(k == m-1){ cout << "Pattern occurs with shift " << i - m + 2 << endl; k = pi[k]; } } } int main(){ //freopen("data.in", "r", stdin); cin >> T >> P; COMPUTER_PREFIX_FUNCTION(P); KMP_MATCHER(T, P); return 0; }
相关文章推荐
- C++_模板举例_使用模板实现集合类(堆栈)
- 堆(stack) 之 c 和 c++模板实现(空类默认成员函数 初谈引用 内联函数)
- 设计模式C++实现(5)——原型模式、模板方法模式
- c++ 模板实现多种排序
- C++模板实现快速排序
- C++模板实现事件处理器中的“通用成员函数指针”的调用
- 单链表c++简单模板实现
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- 对C++中为模板定义特殊的实现的认识
- C++ 为什么模板只能在头文件中实现?
- 编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异
- CSP考试 2015年09月第3题 模板生成系统 C++实现
- c++模板实现 linq
- First head 设计模式学习c++实现------模板方法模式(Template method pattern)
- C++模板实现的通用工厂方法模式
- 二叉树c++模板实现
- 用c++实现 c++顺序表的实现(采用模板)
- 有序数组的合并 c++模板实现
- C++模板实现归并排序
- C语言简单宏函数实现C++模板功能(类型本身作为函数参数)