字符串查找和替换算法

简介:
#include <stdio.h>
#include <string.h>

/************************************************************************/
/* 功能:实现字符串的查找和替换,所有被替换串出现的地方都用替换串替换
/* 参数:pSrc--指向源字符串
/*       pDst--指向替换完成后的字符串,并作为输出参数
/*       pOldString--指向被替换字符串
/*       pNewString--指向替换字符串
/************************************************************************/
void FindAndReplace(char *pSrc, char *pDst, char *pOldString, char *pNewString)
{
	char *pInput = pSrc, // 指向源字符串的游动指针
		 *pOutput = pDst,// 指向目标字符串(即替换后的字符串)的游动指针
		 *p = NULL;  // 指向查找到的字符串的位置的指针
    int nOldStringLen= strlen(pOldString);  // 被替换字符串的长度
	int nNewStringLen = strlen(pNewString); // 替换字符串的长度
	int nLen;

	// 查找被替换字符串在源字符串中第一次出现的位置
	p = strstr(pInput, pOldString);

	if (p) // 如果找到了
	{
		while (p)
		{
			// 计算被替换串前边字符串的长度. 
			nLen = (int)(p - pInput);

			// 将被替换字符串首次出现前的字符串复制到输出字符串中
			memcpy(pOutput, pInput, nLen);

			// 将替换串复制到输出串中
			memcpy(pOutput + nLen, pNewString, nNewStringLen);

			// 跳过被替换串的位置
			pInput = p + nLen;

			// 调整指向输出串的位置
			pOutput = pOutput + nLen + nNewStringLen;

			// 继续往下查找
			p = strstr(pInput, pOldString);
		}

		// 将剩余部分复制到输出串中
		strcpy(pOutput, pInput);
	}
	else // 如果被替换串不在源字符串中出现,则返回源字符串
	{
		strcpy(pDst, pSrc);
	}

}

int main()
{
	char src[] = "abcdesdesdrsdsdse";
	char dst[100];

	FindAndReplace(src, dst, "sd", "ILOVEYOU");
	printf("%s\n", dst);

	return 0;
}

目录
相关文章
|
1月前
|
算法
【优选算法】—— 字符串匹配算法
【优选算法】—— 字符串匹配算法
|
2月前
|
人工智能 算法 测试技术
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
|
3月前
|
算法 测试技术 C#
【动态规划】【字符串】C++算法:正则表达式匹配
【动态规划】【字符串】C++算法:正则表达式匹配
|
3月前
|
算法 Java C++
试题 算法训练 最长字符串
试题 算法训练 最长字符串
11 0
|
3月前
|
算法 C++ 索引
leetcode-28:实现 strStr()(字符串匹配,暴力匹配算法和KMP算法)
leetcode-28:实现 strStr()(字符串匹配,暴力匹配算法和KMP算法)
32 0
|
2月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
73 0
|
16天前
|
算法
【算法学习--字符串】(不含KMP算法)
【算法学习--字符串】(不含KMP算法)
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
23 0
|
2月前
|
算法 测试技术 C++
【字符串】【 LCP】【C++算法】2573找出对应 LCP 矩阵的字符串
【字符串】【 LCP】【C++算法】2573找出对应 LCP 矩阵的字符串
|
2月前
|
存储 算法
【编码狂想】LeetCode 字符串和数组篇:挑战算法精髓,深化程序设计基础
【编码狂想】LeetCode 字符串和数组篇:挑战算法精髓,深化程序设计基础
37 0