C kmp算法模板代码解读
创始人
2024-06-23 02:41:45
0次

C++编程语言中的模板应用是一个比较复杂的应用技术,我们今天就先从C++ kmp算法模板的基本应用开始学习,从而加深我们对这方面知识的认识程度,方便将来的应用,提高编程效率。

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

  1. #include < vector>   
  2. using namespace std; 

 

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

const T *source 待匹配的字符串

TL sourceLen 待匹配字符串的长度

const T *pattern 模式串

TL 模式串长度

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

 

  1. template < class T,class TL>   
  2. inline int kmpmatch(const T *source,TL sourceLen,
    const T *pattern,TL patternLen)   
  3. {   
  4. vector< int> next;   
  5. for ( int i = 0; i <  patternLen ; i ++ )   
  6. next.push_back(0);   
  7. next[0] = -1;   
  8. for( int i = 1 ; i <  patternLen ; i ++ )   
  9. {   
  10. int j = next[i - 1];   
  11. while ( (pattern[i] != pattern[i + 1])&& (j >= 0))   
  12. {   
  13. j = next[j];   
  14. }   
  15. if ( pattern[i] == pattern[j + 1])   
  16. {   
  17. next[i] = j + 1;   
  18. }   
  19. else   
  20. {   
  21. next[i] = -1;   
  22. }   
  23. }   
  24. int i = 0;   
  25. int j = 0;   
  26. while (( i <  sourceLen ) && ( j <  patternLen ))   
  27. {   
  28. if ( source[i] == pattern[j] )   
  29. {   
  30. i ++;   
  31. j ++;   
  32. }   
  33. else if ( j == 0 )   
  34. {   
  35. i ++;   
  36. }   
  37. else   
  38. {   
  39. j = next[j - 1 ] + 1;   
  40. }   
  41. }   
  42. if ( j >= patternLen )   
  43. {   
  44. if ( !next.empty() )   
  45. next.clear();   
  46. return i - patternLen ;   
  47. }   
  48. else   
  49. {   
  50. if ( !next.empty() )   
  51. next.clear();   
  52. return -1;   
  53. }   
  54. } 

 

以上就是对C++ kmp算法模板的相关介绍。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...