KMP匹配算法
来源:互联网 发布:上瘾网络剧花絮下载 编辑:程序博客网 时间:2024/06/06 20:40
/***字符串匹配算法***/#include<cstring>#include<iostream>using namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;#define MAXSTRLEN 255 //用户可在255以内定义最长串长typedef char SString[MAXSTRLEN+1];//0号单元存放串的长度Status StrAssign(SString T, char *chars) { //生成一个其值等于chars的串Tint i;if (strlen(chars) > MAXSTRLEN)return ERROR;else {T[0] = strlen(chars);for (i = 1; i <= T[0]; i++)T[i] = *(chars + i - 1);return OK;}}//计算next函数值 void get_next(SString T,int next[])//求模式串next函数值并存入数组next中{ int i=1;int j=0;next[1]=0;while(i<T[0]){ if(i<T[0]||T[i]==T[j]){++i;++j; next[i]=j;}else j=next[j];}} //算法4.2 KMP算法//利用模式串T的next函数值求T在主串S中第pos个字符之后的位置//其中,T非空,1<=pos<=Strlength(S)int Index_KMP(SString S,SString T,int pos,int next[] ){int i=pos;int j=1;while(i<=S[0]&&j<=T[0]){if(j==0||S[i]==T[j]){i++;j++;} //继续比较后继字符 else{j=next[j]; //模式串向右移动 }}if(j>T[0]) return i-T[0];//匹配成功 else return 0;} int main(){SString S;StrAssign(S,"aaabbaba");SString T;StrAssign(T,"aab");int *p=new int[T[0]+1];//生成T的next数组get_next(T,p);cout<<"主串和子串在第"<<Index_KMP(S,T,1,p)<<"个字符处首次匹配\n";return 0; }
0 0
- 模式匹配---KMP算法
- 模式匹配 KMP算法
- 模式匹配-KMP算法
- KMP 字符串匹配算法
- KMP模式匹配算法
- kmp字符串匹配算法
- kmp字符匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- KMP模式匹配算法
- 字符串匹配算法-kmp
- KMP匹配算法详解
- KMP串匹配算法
- KMP(字符串匹配)算法
- 【zt】kmp匹配算法
- KMP模式匹配算法
- KMP 字符串匹配算法
- 模式匹配kmp算法
- Android 实现新闻客户端字号设置的几种方法
- C语言中的随机数问题
- asmack实现端到端的消息回执(XEP-0184: Message Delivery Receipts)
- js 函数封装
- 如何用Eclipse正确导入开源库AndroidStaggeredGrid
- KMP匹配算法
- 变量的作用域和存储方式
- Cassandra简介
- 说说我理解的职业开发人员
- 简单排序和冒泡排序
- 1015. 德才论 (25)
- android中使用httpclient方法获得网页内容并对json对象解析
- ffmpeg 学习步骤讲解
- hdoj 1849 Rabbit and Grass(基础尼姆博弈)