C++实现的KMP算法
2013-02-27 22:11
381 查看
#include <iostream> #include <string> using namespace std; int Index(const string& s, const string& t, int pos) //普通字符串算法 { int i = pos; int j = 0; int iLengthS = s.length(); int iLengthT = t.length(); while (i < iLengthS && j < iLengthT) { if (s[i] == t[j]) { ++j; ++j; } else { i = i - j + 1; j = 0; } } if (j >= iLengthT) { return i - iLengthT; } else { return 0; } } void getNext(const string& pattern,int next[]) //求串的模式值 { next[0]=-1; int k=-1; int j=0; while(pattern[j] != '\0') { if(k != -1 && pattern[k] != pattern[j] ) k = next[k]; ++j; ++k; if(pattern[k] == pattern[j]) next[j] = next[k]; else next[j] = k; } ////这里是我加的显示部分 for(int i=0;i<j;i++) { cout<<next[i]; } cout<<endl; } int KMP(const string& Text,const string& Pattern) //const 表示函数内部不会改变这个参数的值。 { if(Pattern.length() <= 0 || Text.length() <= 0 ) { return -1;//空指针或空串,返回-1 } int iLengthPat = Pattern.length(); int *next=new int[iLengthPat + 1]; getNext(Pattern, next);//求Pattern的next函数值 int index=0; int i=0; int j=0; while(Text[i] != '\0' && Pattern[j] != '\0') { if(Text[i] == Pattern[j]) { ++i;// 继续比较后继字符 ++j; } else { index += j-next[j]; if(next[j]!=-1) j=next[j];// 模式串向右移动 else { j=0; ++i; } } }//while delete []next; if(Pattern[j]=='\0') return index;// 匹配成功 else return -1; } int main() { string text="abcdef1234"; string pattern="ef1"; cout<<KMP(text,pattern)<<endl; return 0; }
相关文章推荐
- KMP算法 (C++实现)
- KMP算法——C++实现版
- KMP算法——C++优化实现
- KMP算法 (C++实现)
- C++实现字符串匹配的KMP算法
- 经典KMP算法C++与Java实现代码
- 基于KMP算法的路径下文本查询程序的c++实现2.0版
- KMP算法详解C++实现
- 数据结构_串_用链表做存储结构实现KMP算法_C++实现
- KMP算法(c++)实现
- KMP算法c++实现
- KMP算法详解及C++实现
- KMP算法实现才 c++
- KMP算法的C++实现代码
- kmp算法实现(C++版)
- C++实现KMP算法(C风格)
- C++实现:BF算法和KMP算法
- kmp算法C++源码实现
- kmp算法及其c++实现
- C++实现KMP算法(修正版,C++风格)