KMP算法
来源:互联网 发布:淘宝返利机器人原理 编辑:程序博客网 时间:2024/05/19 17:50
kmp算法是一种改进的字符串匹配算法,KMP算法的关键是根据给定的模式串T,定义一个next函数。next函数包含了模式串本身局部匹配的信息。
头文件KmpAlgorithm.h
#ifndef KMPALGORITHM_H#define KMPALGORITHM_Hvoid Get_next(char *T,int *next);int Index_Kmp(char *s,char *T,int pos);#endif //KMPALGORITHM_H
实现文件KmpAlgorithm.cpp
#include "KmpAlgorithm.h"#include <string.h>void Get_next(char *T,int *next) //求模式串T的next函数{int i,j;i = 0;j = -1;next[0] = -1;while(T[i] != '\0') //T串没有结束就循环{if(j == -1 || T[j] == T[i]) //T[i]表示后缀的单个字符,T[j]表示前缀的单个字符{++i;++j;next[i] = j;}elsej = next[j]; //若字符不相同,则回溯}}int Index_Kmp(char *s,char *t,int pos) //pos不为零,则是从主串的第pos个字符开始匹配{int i = pos - 1; //数组下标是从零开始的int j = 0;int next[255];Get_next(t,next);while(s[i] != '\0' && t[j] != '\0'){if(j == -1 || s[i] == t[j]) //两个字符相等则继续比较,j == -1是在回溯时产生的,因为next[0]{//回溯到j == -1,不在字符数组内++i;++j;}elsej = next[j];//不相等则回溯}if(t[j] == '\0')//如果相等返回在主串中的位置return i - strlen(t) + 1; elsereturn -1;}
测试文件main.cpp
#include "KmpAlgorithm.h"#include <stdio.h>#include <string.h>int main(){char s[255],t[255];int pos = 0;int position = 0;memset(s,0,sizeof(char)*255);memset(t,0,sizeof(char)*255);printf("请输入主串的内容:\n");scanf("%s",s);printf("请输入子串的内容:\n");scanf("%s",t);printf("请输入从主串的第几个字符开始匹配:\n");scanf("%d",&pos);position = Index_Kmp(s,t,pos);if(position == -1)printf("子串没有在主串中出现");elseprintf("子串在主串的第%d个位置出现\n",position);return 0;}
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- 文本框不能输入中文判断
- 估计是全世界人民最向往的一件事
- 揭开:apue2中fwrite二进制文件乱码
- C++经典书籍推荐 .
- 戴尔 Streak 10 Pro 购买使用散记
- KMP算法
- samba 服务器的搭建
- 使用js实现对table的动态添加、删除和更新
- 自定义JSP标签概述
- JavaWeb应用程序的规范和web基础的请求处理
- 本地用户组错误: 库没有注册
- 什么样的程序员才疯狂
- 由返回局部指针问题引起的思考!
- tcp 详解一书tcp部分笔记