KMP算法实现源代码
来源:互联网 发布:网络招聘平台分析报告 编辑:程序博客网 时间:2024/06/05 08:24
- #include "StdAfx.h"
- #include <string>
- #include <iostream>
- using namespace std;
- //代码4-1
- //修正后的求next数组各值的函数代码
- void get_nextval(char const* ptrn, int plen, int* nextval)
- {
- int i = 0; //注,此处与下文的代码实现二不同的是,i是从0开始的(代码实现二i从1开始)
- nextval[i] = -1;
- int j = -1;
- while( i < plen-1 )
- {
- if( j == -1 || ptrn[i] == ptrn[j] ) //循环的if部分
- {
- ++i;
- ++j;
- //修正的地方就发生下面这4行
- if( ptrn[i] != ptrn[j] ) //++i,++j之后,再次判断ptrn[i]与ptrn[j]的关系
- nextval[i] = j; //之前的错误解法就在于整个判断只有这一句。
- else
- nextval[i] = nextval[j];
- }
- else //循环的else部分
- j = nextval[j];
- }
- }
- void print_progress(char const* src, int src_index, char const* pstr, int pstr_index)
- {
- cout<<src_index<<"\t"<<src<<endl;
- cout<<pstr_index<<"\t";
- for( int i = 0; i < src_index-pstr_index; ++i )
- cout<<" ";
- cout<<pstr<<endl;
- cout<<endl;
- }
- //代码5-1
- //int kmp_seach(char const*, int, char const*, int, int const*, int pos) KMP模式匹配函数
- //输入:src, slen主串
- //输入:patn, plen模式串
- //输入:nextval KMP算法中的next函数值数组
- int kmp_search(char const* src, int slen, char const* patn, int plen, int const* nextval, int pos)
- {
- int i = pos;
- int j = 0;
- while ( i < slen && j < plen )
- {
- if( j == -1 || src[i] == patn[j] )
- {
- ++i;
- ++j;
- }
- else
- {
- j = nextval[j];
- //当匹配失败的时候直接用p[j_next]与s[i]比较,
- //下面阐述怎么求这个值,即匹配失效后下一次匹配的位置
- }
- }
- if( j >= plen )
- return i-plen;
- else
- return -1;
- }
- int main()
- {
- std::string src = "aabcabcebafabcabceabcaefabcacdabcab";
- std::string prn = "abac";
- int* nextval = new int[prn.size()];
- //int* next = new int[prn.size()];
- get_nextval(prn.data(), prn.size(), nextval);
- //get_next(prn.data(), prn.size(), next);
- for( int i = 0; i < prn.size(); ++i )
- cout<<nextval[i]<<"\t";
- cout<<endl;
- cout<<"result sub str: "<<src.substr( kmp_search(src.data(), src.size(), prn.data(), prn.size(), nextval, 0) )<<endl;
- system("pause");
- delete[] nextval;
- return 0;
- }
0 0
- KMP算法实现源代码
- KMP算法--c语言源代码
- KMP算法及改进KMP算法实现
- [数据结构]KMP算法实现
- KMP算法的实现
- KMP算法实现
- KMP算法实现
- KMP 算法实现
- kmp算法实现
- KMP算法实现
- KMP算法和实现
- KMP算法实现
- KMP算法及实现
- KMP算法的实现
- KMP算法实现
- java实现kmp算法
- KMP算法C++实现
- KMP算法c++实现
- MySql可视化工具MySQL Workbench使用教程
- Keystone 命令汇总
- linux下安装tomcat并部署项目
- 大社交网络下的互联网大脑如何发展
- 通用makefile
- KMP算法实现源代码
- Linux错误代码含义/Linux Error Code
- Java竟然有这凶残能力——多参数方法(Type... params)
- C语言sprintf与sscanf函数[总结]
- hdu 2138 How many prime numbers_Miller-Rabin算法模板
- GitHub使用教程
- RunTime-消息的拦截与替换
- 某公司3531板子调试笔记
- POJ 3295 Tautology