随笔 | C++的替换字符串子程序

《C++ Primer》的一个习题,我写的时候遇到几个小问题,记录一下:

1、我以为std::string::replace只能同等长度字符串的等价替换(受C语言字符串风格的影响),事实旧字符串和新字符串是完全可以长度不一致的。

2、第一个简单的版本写出来时确实能替换成功,但有一个死循环的问题。打个比方,如果源字符串中有“Knife”,我们需要替换"K"为“KC”,就会陷入死循环。因为我用的是find找字符串,而没有设定起始寻找位置。

最后写上调试成功的代码。

std::string replace(const std::string& _text, const std::string& _old_replace, const std::string& _new_replace)
{
	std::string output = _text;
	std::size_t last_pos = 0;

	do
	{
		if ((last_pos = output.find(_old_replace, last_pos)) != std::string::npos)
		{
			output.replace(last_pos, _old_replace.length(), _new_replace.c_str());
			last_pos += _new_replace.length();
		}
	} while (last_pos != std::string::npos);

	return output;
}

  

时间: 2024-10-13 21:20:40

随笔 | C++的替换字符串子程序的相关文章

替换字符串中的空格

题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例. 对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20Happy -------------------------------------------------

JavaScript替换字符串中最后一个字符

1.问题背景 在一个输入框中,限制字符串长度为12位.利用键盘输入一个数字,会将字符串中最后一位替换,比方:111111111111.再输入一个3,会显示111111111113 2.详细实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html x

PHP替换字符串-str_replace

实例 把字符串 "Hello world!" 中的字符 "world" 替换为 "Shanghai": <?php echo str_replace("world","Shanghai","Hello world!"); ?> 定义和用法 str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写). 该函数必须遵循下列规则: 如果搜索的字符串是数组,那么它

在LoadRunner中查找和替换字符串

参考<Search & Replace function for LoadRunner>: http://ptfrontline.wordpress.com/2009/03/13/search-replace-function-for-lr/ LoadRunner中没有直接的函数支持查找并替换字符串,因此可以封装一个lr_replace函数出来: // -------------------------------------------------------------------

剑指offer剖析__空格替换字符串问题

问题:在"we are happy"这个字符串中,将所有的空格替换成字符串%20. 分析:如果我们不定义一个新的字符数组,就在原字符数组中进行替换,要将一个字节的空格替换成三个字节的字符数组%20,这会产生数组的越界访问,如果允许我们开辟一个新的空间来存放替换后的字符串,则问题将会变得非常简单. 设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入"%20",否则就复制元字符串上的内容. #include <stdio.h>

替换字符串,裁掉字符串两端的空格---轻开平台(原WebEasy)字符串计算6

替换字符串中的内容: @{replace:str[left,right]}--把字符串的left替换为right 样例: @{replace:I love this game[I,We]} 返回We love this game 裁掉字符串两端的空格: @{trim:str} 样例: @{trim:  I love this game   } 返回I love this game 试试吧 轻松互联网开发平台(Easy Do IT)资源下载 平台及最新开发手册免费下载:http://downloa

vim查找/替换字符串 及一些高级用法

例: 32 ./run 0_39.pkt 0_39.jpg 33 ./run 0_3.pkt 0_3.jpg 34 ./run 0_40.pkt 0_40.jpg 35 ./run 0_41.pkt 0_41.jpg 36 ./run 0_42.pkt 0_42.jpg  :%s/pkt$/jpg/g vim中删除包含某字符串的所有行::g/txt/d http://www.cnblogs.com/GODYCA/archive/2013/02/22/2922840.html vi/vim 中可以

[转]notepad++正则表达式替换字符串详解

原文:http://blog.csdn.net/qinboecjtu/article/details/6035028 正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它 能很好提高工作效率. EditPlus的查找,替换,文件中查找支持以下的正则表达式: 表达式 说明 /t 制表符. /n 新行. . 匹配任意字符. | 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 "

每日一题11:替换字符串中的空格

用指定的字符或字符串替换某个字符串中出现的所有空格,当用字符替换字符是,自然是很简单的,但是当使用字符串替换字符时,如果还是从前往后遍历,遇到指定字符就将其后所有字符往后移出足够空间的话,当字符串中的空格很多时,反复的移动字符会带来性能上的损失.但是如果是从后往前遍历呢?可以先遍历一次原字符串,得到字符串中空格的个数,然后就可以计算出实际需要的空间,再假设原字符串所在缓冲区有足够空间(否则新建一个缓冲区从前往后遍历就行了,这里说的是在不新建缓冲区的情况下做这件事),那么就可以计算出每个字符最后的