C++ 改进的KMP模式匹配算法
来源:互联网 发布:淘宝正版音像店 编辑:程序博客网 时间:2024/05/17 09:02
我们在处理数据的过程中,总会遇到处理字符串的问题,现在贴上字符串匹配算法改进的KMP代码及实验结果,大家一起学习。
KMP算法主要是在于为了减少重复比较的次数而计算了一个next[]数组值,但后来又发现有些字母相同的比较也是多余的,因此为了减少这部分的 时间,提高效率,准备计算一个新的数组nextval。
#include"c1.h"#define MAX 1000using namespace std;char s[MAX],t[MAX];int next[MAX];void ComputeNext(char *T,int *next,const int& lenT){int i,j;next[0] = -1;i = 0;j = -1;while(i<lenT){while(j>=0&&T[i] !=T[j] )j = next[j];j++;i++;//改进的KMP模式匹配算法,算nextval值if(T[i]==T[j])next[i] = next[j];elsenext[i] = j;}}int KMP(char *s,char *T,int *next,const int lenS,const int lenT){int i,j;i=j=-1;while(i<lenS&&j<lenT){if((j==-1)||(s[i]==T[j])){i++;j++;}elsej = next[j];}if(j>=lenT)return i-lenT+1;else return 0;}int main(){int next[1000];int cases;cout<<"请输入案例的个数:";cin>>cases;while(cases--){cout<<"请输入主串:"<<endl;cin>>s;int lenS = strlen(s);while(1){cout<<"请输入需要匹配的模式串(输入0结束):"<<endl;cin>>t;if(!strcmp(t,"0"))break;int lenT = strlen(t);for(int i=0;i<lenT;i++)next[i] = -1;ComputeNext(t,next,lenT);int pos = KMP(s,t,next,lenS,lenT);if(pos==0)cout<<"没有匹配项!"<<endl;elsecout<<"匹配的开始位置为:"<<pos<<endl;}}return 0;}
支持几组字符串同时进行比较,输入0结束当前的字符串匹配。
0 0
- 串的模式匹配改进--KMP算法
- C++ 改进的KMP模式匹配算法
- 模式匹配算法的改进——KMP算法
- 模式匹配的一种改进算法----KMP算法
- KMP算法----模式匹配的一种改进算法
- 串模式匹配的改进算法——KMP算法
- 改进的模式匹配算法——KMP算法
- KMP(改进模式匹配算法)--串
- KMP模式匹配算法及改进
- 【原创】朴素的模式匹配和改进的模式匹配(KMP)算法说明(草稿)
- 朴素的模式匹配和改进的模式匹配(KMP)算法说明
- 模式匹配的KMP 算法
- 模式匹配的算法Kmp
- C/C++——朴素的模式匹配算法和KMP模式匹配算法
- KMP模式匹配改进版
- KMP算法实现字符串的模式匹配完整C代码
- 串的KMP模式匹配算法(优化) ----- C语言
- KMP模式匹配算法(C++)
- Java中static、this、super、final用法
- 敢说你java基础很好吗?你能答对几个?(Java基础知识点整理)
- PCM data flow - 6 - 声卡和PCM设备的建立过程
- eclipse项目编译成jar包供其他项目使用
- Android学习笔记(一)
- C++ 改进的KMP模式匹配算法
- 合并链表
- centos下SSH无密码访问(非22端口) .
- C++Primer学习笔记
- c# 猜拳小游戏,加屏幕跳转
- vs2012 编译mongoDB3.0 驱动 编译
- 大学生职业生涯规划第一课
- Java中static、this、super、final用法02
- 第四讲练手第三篇