当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
C++kmp算法模板代码解读
发布时间:2010/7/22 11:11:12 来源:城市学习网 编辑:ziteng
  在使用的时候加上这两行代码就行了
  #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;   }   }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved