#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#define tlength 5
#define slength 13
char *T="abcac";
char *S = "ababcabcacbab";
int next[tlength];
void GetNext()
{
int j = 1,k;
next[0] = -1;
k = -1;
while(T[j] != '\0')
{
if (k == -1 || T[j-1] == T[k])
{
next[j] = k + 1;
k = next[j];
j++;
}
else
k = next[next[j-1]];
}
// for (j = 0;j < tlength;++j)
// {
// cout<<next[j]<<endl;
// }
}
void Compare()
{
int i,j = 0;
bool has = false;
for (i = 0;i < slength - tlength + 1;++i)
{
while(j != -1 && j < tlength)
{
if (T[j] == S[i])
{
i++;
j++;
if (j == tlength)
{
cout<<"匹配字符位置为"<<i-1<<endl;
has = true;
}
}
else
j = next[j];
}
j++;
}
if (!has)
{
cout<<"无匹配字符"<<endl;
}
}
int main()
{
GetNext();
Compare();
// cout<<T;
return 0;
}
KMP-suanfa.rar_kmp string
版权申诉
26 浏览量
2022-09-14
20:31:49
上传
评论
收藏 6KB RAR 举报
alvarocfc
- 粉丝: 105
- 资源: 1万+
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第31题下一个排列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第30题串联所有单词的子串.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第29题两数相除.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第28题找出字符串中第一个匹配项的下标.zip
- 实验报告模板(1).docx
- C语言基础-C语言编程基础之Leetcode编程题解之第26题删除有序数组中的重复项.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈