设为首页 加入收藏

TOP

C++kmp算法模板代码解读
2014-10-23 16:30:03 来源: 作者: 【 】 浏览:54
Tags:kmp 算法 模板 代码 解读

  在使用的时候加上这两行代码就行了


  #include < vector> using namespace std;


  C++ kmp算法模板参数说明


  const T *source 待匹配的字符串


  TL sourceLen 待匹配字符串的长度


  const T *pattern 模式串


  TL 模式串长度


  C++ kmp算法模板代码示例:


  template < class T,class TL> inline int kmpmatch(const T *source,TL sourceLen,const T *pattern,TL patternLen)


  { vector< int> next;


  for ( int i = 0; i < patternLen ; i ++ ) next.push_back(0); next[0] = -1; for( int i = 1 ; i < patternLen ; i ++ )


  { int j = next[i - 1];


  while ( (pattern[i] != pattern[i + 1])&& (j >= 0))


  { j = next[j]; }


  if ( pattern[i] == pattern[j + 1])


  { next[i] = j + 1; }


  else { next[i] = -1; } }


  int i = 0; int j = 0;


  while (( i < sourceLen ) && ( j < patternLen ))


  { if ( source[i] == pattern[j] )


  { i ++; j ++; } else if ( j == 0 )


  { i ++; } else { j = next[j - 1 ] + 1; } }


  if ( j >= patternLen )


  { if ( !next.empty() )


  next.clear();


  return i - patternLen ;


  }


  else


  { if ( !next.empty() ) next.clear();


  return -1; } }


  编辑特别推荐:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++文件操作判断文件是否存在和文.. 下一篇C++如何将数字(包括double型)转换..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: