栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

KMP实现字符串替换

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

KMP实现字符串替换

目录
  • 前言
  • 1. 题目
  • 2. 代码

前言

hello,大家好,这期文章和大家分享一下如何利用KMP算法实现字符串的替换的代码,希望对大家有所帮助。

1. 题目

2. 代码
#define _CRT_SECURE_NO_WARNINGS   1

#include
#include
using namespace std;
string Replace(string s1, string s2, string s3, int pos)
{
	string s4;
	s4 = s1.substr(0, pos) + s3 + s1.substr((pos + s2.length()), s1.length() - 1);
	return s4;
}
int* getNext(string p)
{
	int* next = new int[p.length()];
	next[0] = -1;         
	int j = 0;
	int k = -1;
	while (j < (int)p.length() - 1)
	{
		if (k == -1 || p[j] == p[k])
		{
			j++;
			k++;
			next[j] = k;
		}
		else
		{
			k = next[k];
		}
	}
	return next;
}

int KMP(string T, string p)
{
	int i = 0;
	int j = 0;
	int* next = getNext(T);
	while (i < (int)T.length() && j < (int)p.length())
	{
		if (j == -1 || T[i] == p[j])
		{
			i++;
			j++;
		}
		else
		{
			j = next[j];
		}
	}
	if (j == (int)p.length())
	{
		return i - j;
	}
	return -1;
}


int main()
{
	string str1, str2, str3;
	cin >> str1;
	cin >> str2;
	cin >> str3;
	int pos = 0;
	pos = KMP(str1, str2);
	while (pos != -1)
	{
		str1=Replace(str1, str2, str3, pos);
		pos = KMP(str1, str2);
	}
	cout << str1 << endl;
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/587717.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号