C++实现KMP算法

2015-11-21 01:03:17 · 作者: · 浏览: 5
#include 
  
   
#include 
   
     #include 
    
      using namespace std; void NEXT(const string &T, vector
     
       &next) { //按模式串生成vector,next(T.size()) next[0] = -1; for(int i = 1; i < T.size(); i++) { int j = next[i - 1]; while(T[i] != T[j + 1] && j >= 0) j = next[j]; //递推计算 if(T[i] == T[j + 1]) next[i] = j + 1; else next[i] = 0; } } string::size_type COUNT_KMP(const string &S, const string &T) { //利用模式串T的next函数求T在主串S中的个数count的KMP算法 //其中T非空, vector
      
next(T.size()); NEXT(T, next); string::size_type index, count=0; for(index=0; index < S.size(); ++index) { int pos=0; string::size_type iter = index; while(pos < T.size() && iter >S; cout<<"请输入子串(要查找的)"< >T; string::size_type count =COUNT_KMP(S,T); cout<<"一共有 "<