C++实现Kmp字符匹配算法的优化版
来源:互联网 发布:许昌学历网络教育报名 编辑:程序博客网 时间:2024/04/29 08:08
C++实现Kmp字符匹配算法的优化版
头文件:KmpAlgorithm.h
- #ifndef KMPALGORITHM_H
- #define KMPALGORITHM_H
- #include <string>
- #include <iostream>
- class KmpAlgorithm{
- std::string s; //主串
- std::string t; //子串
- static const int MaxSize = 255;
- int next[MaxSize];
- void Get_Next(); //T串的模式匹配函数
- public:
- KmpAlgorithm(){
- std::memset(next,0,sizeof(int) * 255);
- printf("请输入要匹配的字符串的主串:\n");
- std::cin >> s;
- printf("请输入要匹配的字符串的子串:\n");
- std::cin >> t;
- }
- int Index_Kmp(int pos); //字符匹配函数
- };
- #endif //KMPALGORITHM_H
实现文件:KmpAlgorithm.cpp
- #include "KmpAlgorithm.h"
- void KmpAlgorithm::Get_Next()
- {
- int i,j;
- i = 0;
- j = -1;
- next[0] = -1;
- while(i < t.size()-1)
- {
- if(j == -1 || t[j] == t[i]) //如果相等则继续
- { //next[0] == -1 j的值有可能回溯为-1数组越界
- ++i;
- ++j;
- if(t[j] != t[i]) //如果下面两个字符不相等则把j的值赋给next在i位置的值
- next[i] = j;
- else
- next[i] = next[j]; //相等则把next在j位置的值赋给next在i位置的值
- }
- else
- j = next[j];
- }
- }
- int KmpAlgorithm::Index_Kmp(int pos) //字符匹配函数
- {
- int i = pos - 1; //数组从下标0开始
- int j = 0;
- Get_Next();
- while(i < s.size() && j < t.size())
- {
- if(j == -1 || s[i] == t[j]) //如果相等继续
- { //如果j的值回溯到-1 next[0] == -1 则继续否则数组越界
- ++i;
- ++j;
- }
- else
- {
- j = next[j]; //不相等则回溯
- }
- }
- if(j >= t.size()) //匹配成功返回在主串中的位置
- return i - t.size() + 1;
- else
- return -1; //失败返回-1
- }
测试文件:main.cpp
- #include "KmpAlgorithm.h"
- #include <iostream>
- using namespace std;
- int main()
- {
- int pos = 0;
- KmpAlgorithm km;
- printf("请输入在主串的第几个字符开始匹配:\n");
- scanf("%d",&pos);
- int position = km.Index_Kmp(pos);
- if(position == -1)
- printf("在主串中未找到与子串匹配的字符:\n");
- else
- printf("在主串的第%d个位置匹配成功\n",position);
- return 0;
- }
- C++实现Kmp字符匹配算法的优化版
- Kmp字符匹配算法优化C++实现
- kmp字符匹配算法 c语言
- 串的KMP模式匹配算法(优化) ----- C语言
- 字符匹配KMP算法 java实现
- kmp字符匹配算法
- KMP算法 字符匹配
- KMP 算法 字符匹配
- 字符匹配kmp算法
- 字符匹配 kmp算法
- 字符匹配kmp算法
- KMP算法实现字符串的模式匹配完整C代码
- KMP字符串匹配算法C语言实现
- 模式匹配 KMP C语言算法实现
- kmp算法字符串匹配C语言实现
- C语言实现字符串匹配KMP算法
- C语言实现KMP模式匹配算法
- 算法:KMP算法实现的模式匹配
- Git详解之三 Git分支
- struts学习总结
- git使用经验
- emacs编译.emacs.d目录下的每一个.el文件
- 水银版本库搭建
- C++实现Kmp字符匹配算法的优化版
- java面试题---SSH框架
- 使用Visio 2000逆向工程将代码转换为UML图表
- 执行ldconfig后遇到的问题
- 外链建设与查询方法
- OO原则
- windows图标不显示为缩略图,而是显示为图标
- 最近的android项目开发问题总结
- win7下配置Cocos2d-x for Android(Eclipse)项目和开发环境