#include<iostream>
#include<string>
#include<cmath>
#include<malloc.h>
using namespace std;
int Search_KMP(string,string,int*);
void nextval(string T,int len,int *);//len表示模式串T的长度,且模式串从0
int main(void)
{
string S,T;//S为主串,T为模式串
cout<<"请输入主串:";
cin>>S;cout<<endl;
cout<<"请输入模式串:";
cin>>T;cout<<endl;
int *next=(int *)malloc(sizeof(int)*S.length());next[0]=0;//存前缀和后缀的个数。
nextval(T,T.length(),next);
Search_KMP(S,T,next);
return 0;
}
int Search_KMP(string S,string T,int *next)
{
int i=0,j=0;
int len_s=S.length(),len_t=T.length();
while(i<len_s&&j<len_t)
{
if(S[i]==T[j])
{
i++;
j++;
}
else
{
if(j!=0)
{
j=next[j-1];
}
else
{
i++;
}
}
}
if(j==len_t)
{
cout<<"查找成功,位置为s串中的第:"<<i-j+1<<"位"<<endl;
}
else
{
cout<<"查找失败!"<<endl;
}
}
void nextval(string T,int len,int *next)
{
int i=0,j=1;
next[0]=0;
while(j<len)
{
if(T[i]==T[j])
{
next[j]=i+1;
j++;i++;
}
else
{
if(i!=0)
{
i=next[i-1];
}
else
{
next[j]=0;
j++;
}
}
}
}
kmp算法的改进(C++)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 1 需求分析 1.1 系统目标 实现题目说所要求的三种匹配算法的算法设计,算法实现,程序能够稳定,准确的运行并实现...
- 串的匹配算法:对主串的每一个字符作为开头,作与要匹配的字符串的长度的小循环,直到匹配成功或全部遍历完为止。 KMP...
- 你有没有在凌晨时刻听着耳机里甜蜜的情歌,脑海里浮现出那个人的模样? 又或者是听着伤感的失恋情歌,一想到他就泪流满面...