C++实现KMP算法(单值返回版)
来源:互联网 发布:怎么做淘宝图片 编辑:程序博客网 时间:2024/03/28 17:39
/* * Main.cpp * * Created on: Oct 7, 2015 * Author: chris */#include<iostream>#include<cstring>using namespace std;bool get_next(const char* pat, int*& next){int len = strlen(pat);next = new int[len];if(!next) return false;next[0] = 0;int i = 1, j = 0;while(i < len) {if(pat[i] == pat[j]) { // matched.++i; ++j; // move on.next[i] = j; // record next.} else if (j != 0){ // doesn't matched.j = next[j]; // back trace.} else { // nomatched.next[i] = 0;++i; // skip.}}//whilereturn true;}int Index_KMP(const char* str, const char *pat, const int* next, int pos){int i = pos, j = 0;int Slen = strlen(str),Plen = strlen(pat);while(i < Slen) {if(str[i] == pat[j]){ // matched.++i; ++j; // move on.if(j >= Plen)return i - Plen;}else if ( j != 0 ) // back trace.j = next[j];else // impossible.++i;}//whilereturn -1;}int main(void){string str1, str2;while(cin >> str1 >> str2) {int *next = NULL;if(get_next(str2.c_str(), next)) {int pos = 0;do{ int ind = Index_KMP(str1.c_str(), str2.c_str(), next, pos); if(ind == -1) break; cout << ind << " "; pos = ind + str2.length();}while(true);cout << endl;} else {cout << "failed." << endl;}delete next;}//while.return 0;}
0 0
- C++实现KMP算法(单值返回版)
- KMP算法(c++)实现
- KMP算法C实现
- KMP算法c实现
- KMP算法 C实现
- [C++]KMP算法实现
- C++实现KMP算法(C风格)
- KMP算法c语言实现
- KMP算法C#/c++实现
- KMP算法C代码实现
- KMP算法--c语言实现
- KMP算法C代码实现
- KMP算法(C++)
- [转]KMP算法实现(源码c/c++)
- kmp算法实现-算法导论C语言版
- kmp算法实现(C++版)
- C++实现KMP算法(优化版)
- KMP算法的C语言代码实现
- 上转型和下转型
- ocp-172
- C#comboBox的使用
- ocp-173
- 面试题29:数组中出现次数超过一半的数字
- C++实现KMP算法(单值返回版)
- 回文数
- 【译】29个你必须知道的Linux命令
- tabview
- ocp-174
- 返回顶部按钮实现
- ocp-175
- 环境光传感器(ALS)背光控制解决方案
- hibernate中使用schemaExport生成数据表报错解决方法