字符串匹配(C++)
运用BF和KMP两种方法进行字符串匹配(顺序串)
1.BF算法
2.KMP算法
例子:
s=“abceebcabcabc” t=“ebca”
返回值:4
输入:目标串//“abceebcabcabc”
模式串//“ebca”
输出:成功:模式串中第一个字符在目标串中的位置
不成功:-1
一、BF算法
int BF(sqstring s1,sqstring s2)
{int i=0,j=0;while(i<s1.length&&j<s2.length){//如果匹配则依次比较 if(s1.data[i]==s2.data[j])i++,j++;else{//不匹配则回退 i=i-j+1;j=0;}}if(j>=s2.length)return i-s2.length;elsereturn -1;//不匹配则返回-1}
二、KMP算法
//求模式串next数组函数
void kmpnext(sqstring s,int next[])
{//传数组时实际上是创建了临时的指针变量做形参,指向传入那个数组。 int j=0,k=-1;next[0]=-1; while(j<s.length-1){if(k==-1||s.data[k]==s.data[j]){j++,k++;next[j]=k;}else{k=next[k];}}}
int KMP(sqstring s1,sqstring s2)
{int i=0,j=0;int next[maxsize];kmpnext(s2,next);while(i<s1.length&&j<s2.length){if(j==-1||s1.data[i]==s2.data[j]){i++,j++;}elsej=next[j];}if(j>=s2.length)return i-s2.length;elsereturn -1;
}
以KMP算法为例运行模式匹配算法
#include<iostream>
using namespace std;
const int maxsize=50;
//声明串的类型
typedef struct
{char data[maxsize];int length;} sqstring;
//初始化顺序串
void initstring(sqstring &s,char a[])
{int i;for(i=0;a[i]!='\0';i++){s.data[i]=a[i];}s.length=i;
}
//求模式串next数组函数
void kmpnext(sqstring s,int next[])
{//传数组时实际上是创建了临时的指针变量做形参,指向传入那个数组。 int j=0,k=-1;next[0]=-1; while(j<s.length-1){if(k==-1||s.data[k]==s.data[j]){j++,k++;next[j]=k;}else{k=next[k];}}}
int kmp(sqstring s1,sqstring s2)
{int i=0,j=0;int next[maxsize];kmpnext(s2,next);while(i<s1.length&&j<s2.length){if(j==-1||s1.data[i]==s2.data[j]){i++,j++;}elsej=next[j];}if(j>=s2.length)return (i-s2.length);elsereturn (-1);
}
int main()
{sqstring s1,s2;char a1[maxsize],a2[maxsize];cout<<"输入目标串: "<<endl;cin>>a1;cout<<"输入模式串: "<<endl;cin>>a2;initstring(s1,a1);initstring(s2,a2);cout<<KMP(s1,s2)<<endl;return 0;}输入目标串:
abceebcabcabc
输入模式串:
ebca
4--------------------------------
Process exited after 28.34 seconds with return value 0
请按任意键继续. . .
字符串匹配(C++)相关推荐
- CCF - 201409-3 - 字符串匹配
问题描述 试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你 ...
- 字符串匹配shiftand算法
令人惊叹的Shift-And/Shift-Or 写在前面:Shift-And/Shift-Or是如此令人惊叹的算法,在KMP基础上开始一段神奇之旅. 目的:以Shift-And算法为载体,试图在减少思 ...
- 字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全
文章目录 1. 算法背景 2. Trie 树实现原理 2.1 Trie 树的构建 2.2 Trie树的查找 2.3 Trie树的遍历 2.4 Trie树的时间/空间复杂度 2.5 Trie 树 Vs ...
- 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FFT)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FF ...
- Rabin-Karp ( 字符串匹配 )详解
字符串匹配,例从 字符串S 中( 长度为 n ),找到 字符串T ( 长度为 m ) 经典思路:遍历 字符串 S,对于每个都为起点,匹配一次,则 O( n m )的复杂度 但是这样我们就对 字符 重复 ...
- 字符串匹配KMP算法
字符串匹配KMP KMP过程其实就是去找下一个更好的状态的过程,省略去了中间穷举的无用过程,直接跳到下一个更好的状态,通过模式串本身的信息,站在模式串的角度来考虑问题 取长的一对 若想让模式串直接从S ...
- c int转字符串_【C++实现python字符串函数库】字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
- R语言stringr包str_count函数计算字符串匹配个数实战
R语言stringr包str_count函数计算字符串匹配个数实战 目录 R语言stringr包str_count函数计算字符串匹配个数实战 #导入stringr包 #仿真数据
- 三十五、字符串匹配问题--KMP算法
一.暴力匹配算法实现字符串匹配 如果用暴力匹配的思路,并假设现在 str1 匹配到 i 位置,子串 str2 匹配到 j 位置,则有: 如果当前字符匹配成功(即 str1[i] == str2[j]) ...
- iptables实现字符串匹配
iptables实现字符串匹配 分类: SHELL&linux命令2012-07-03 18:25 3172人阅读 评论(0) 收藏 举报 stringinputtcpoutputhexlin ...
最新文章
- 利用mysql建立随机森林_随机森林算法实例 - osc_4imme0wh的个人空间 - OSCHINA - 中文开源技术交流社区...
- java反射po转vo_三步走使用Dozer (Do,Po,Vo转换工具)
- Event and Delegate
- Gartner认为安全性将取代成本和敏捷性成为政府部门采用云服务的首要原因
- PAT1011. A+B和C
- 2021年中国住宅按揭服务市场趋势报告、技术动态创新及2027年市场预测
- c 语言 循环判断语句,C值循环语句(七)
- python项目实战:实现任意位置文件分割
- 【一分钟知识】梯度下降与牛顿法对比
- php支付接口要改动的参数,京东支付接口2.0PHP集成遇到的一些问题:所有参数必须是string!...
- 数模更新篇-3-因子分析模型
- 如何组装配置属于自己的台式机
- PhPStorm mac最新破解版
- OpenStack的过去、现在和未来
- 7000字长文深度解读:DTC商业模式,对品牌增长的颠覆式影响
- .net出现80080005错误的解决办法
- VMWare 虚拟机如何通过新增挂载点的方式扩展磁盘空间
- MTK平台一个花屏重启问题的分析
- sql server 三角函数
- 清除文档菜单中的历史记录