我是靠谱客的博主 微笑曲奇,最近开发中收集的这篇文章主要介绍今天是KMP算法,用C++实现(查找在字符串S1中第一个出现字符串S2的位置),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 注:本算法0表示未找到,否则输出结果是S2字符串在S1中首次出现的头位置

#include<cstring>
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
#define MAXLEN 255
void get_nextval(char T[], int nextval[])
{
int i = 1, j = 0;
nextval[1] = 0;
while (i < T[0])
if (j == 0 || T[i] == T[j])
{
++i;
++j;
if (T[i] != T[j])
nextval[i] = j;
else
nextval[i] = nextval[j];
} else
j = nextval[j];
}
int Index_KMP(char S[], char T[], int pos, int next[])
{
int i = pos, 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()
{
char S[MAXLEN+1],T[MAXLEN+1];
char S1[MAXLEN],S2[MAXLEN];
cin >> S1 >> S2;
strcpy(&S[1],S1);
strcpy(&T[1],S2);
S[0]=strlen(S1);
T[0]=strlen(S2);
int *p = new int[T[0]+1];
get_nextval(T,p);
cout<<Index_KMP(S,T,1,p);
return 0;
}

测试样例:c6z5sd1v5s6d165fxz6 65

输出结果:14

测试样例:1 1

输出结果:1

测试样例:262623 15

输出结果:0

最后

以上就是微笑曲奇为你收集整理的今天是KMP算法,用C++实现(查找在字符串S1中第一个出现字符串S2的位置)的全部内容,希望文章能够帮你解决今天是KMP算法,用C++实现(查找在字符串S1中第一个出现字符串S2的位置)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部