字符串查找和替换算法

#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;
}
时间: 2024-09-17 03:56:27

字符串查找和替换算法的相关文章

C语言字符串查找

//字符串查找 //程序在borland c++3.1上编译通过 #include <iostream.h> //#include < #define ms 20 char a[ms]="whatisit"; char b[ms]="*is*"; int searchstr(char s1[ms],char s2[ms],int p1,int p2); bool chazhao(char a[ms],char b[ms]); void main()

GPGPU OpenCL实现精确字符串查找

字符串查找是信息安全.信息过滤领域的重要操作,尤其是对大文本的实时处理.这篇作为实例,使用GPU OpenCL进行精确模式串查找. 1.加速方法 (1)将少量常量数据,如模式串长度.文本长度等,保存在线程的private memory中. (2)将模式串保存在GPU的local memory中,加速线程对模式串的访问. (3)将待查找的文本保存在global memory中,使用尽可能多线程访问global memory,减小线程平均访存时间. (4)每个work-group中的线程操作文本中一

php字符串查找

1.strstr()函数: 该函数用于获取一个指定字符串在另一个字符串中首次出现的位置到末尾的子字符串.执行成功,返回获取的子字符串:执行失败,返回false. 语法: string strstr(string str1,string str2) 例: <?php $a="www.bianceng.cn"; $b="b"; echo strstr($a,$b); //输出bianceng.cn?> 2.substr_count()函数:查找子字符串出现的

[算法系列之十三]Rabin-Karp字符串查找算法

简介 蛮力匹配法(brute force string matching)是字符串匹配算法中最基本的一种,也是最简单的一种.它确实有自己的优点,比如它并不需要对文本串(text)或模式串(pattern)进行预处理.然而它最大的问题就是运行速度太慢,所以在很多场合下蛮力字符串匹配算法并不是那么有用.我们需要一些更快的方法来完成字符串的匹配工作,然而在此之前,我们还是回过头来再看一遍蛮力匹配法,以便更好地理解其他子串匹配算法. 如下图所示,在蛮力字符串匹配里,我们将文本中的每一个字符和模式串的第一

一步一步写算法(之字符串查找 中篇)

原文:一步一步写算法(之字符串查找 中篇) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     昨天我们编写了简单的字符查找函数.虽然比较简单,但是也算能用.然而,经过我们仔细分析研究一下,这么一个简单的函数还是有改进的空间的.在什么地方改进呢?大家可以慢慢往下看.     下面的代码是优化前的代码,现在再贴一次,这样分析起来也方便些: char* strstr(const char* str, char* data) { int i

C++中字符串查找操作的两则实例分享_C 语言

在一个字符串中找到第一个只出现一次的字符题目:     在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 分析:     一个字符串存储的都是ASCII字符,其ASCII范围不超过255.     因此可以再创建一个255个元素的数组存储字符串中字符出现的个数.     通过两次遍历即可求得. 代码实现(GCC编译通过): #include "stdio.h" #include "stdlib.h" //查找字符串中第一个只出现一次

str1-汇编汇编字符串查找程序

问题描述 汇编汇编字符串查找程序 字符串查找程序,数据段中定义两个字符串str1,str2,str1的长度大于str2,编写程序,在str1中查找是否存在str2,是,则返回str2首字符在str1中的位置(从0开始),否则返回-1 解决方案 参考:http://wenku.baidu.com/link?url=HECou1qtT5ZTIgGjmdweWh-XEjaRFly8mshTODRnGoTXeMrORBHikcgmCzxzL-9g4SQp8DoKGR0XwR0JUxT32jZbBp1_j

C++之BOOST字符串查找示例_C 语言

本文实例讲述了C++中BOOST字符串查找的方法,分享给大家供大家参考.具体方法如下: BOOST  字符串查找示例 复制代码 代码如下: #include <string>  #include <iostream>  #include <algorithm>  #include <functional>  #include <boost/algorithm/string/case_conv.hpp>  #include <boost/al

一步一步写算法(之字符串查找 上篇)

原文:一步一步写算法(之字符串查找 上篇) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     字符串运算是我们开发软件的基本功,其中比较常用的功能有字符串长度的求解.字符串的比较.字符串的拷贝.字符串的upper等等.另外一个经常使用但是却被我们忽视的功能就是字符串的查找.word里面有字符串查找.notepad里面有字符串查找.winxp里面也有系统自带的字符串的查找,所以编写属于自己的字符串查找一方面可以提高自己的自信心,另外一