C++ 中的替换空格

栏目: C++ · 发布时间: 6年前

内容简介:例,请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。

例,请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。

分析:

我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。我们还是以前面的字符串’We are happy,”为例,”We are happy‘”这个字符串的长度是14(包括结尾符号”),里面有两个空格,因此替换之后字符串的长度是18。

我们从字符串的后面开始复制和替换。首先准备两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾(如图(a)所示)。接下来我们向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。此时字符串包含如图(b)所示,灰色背景的区域是做了字符拷贝(移动)的区域。碰到第一个空格之后,把Pl向前移动1格,在P2之前插入字符串”%20″。由于”%20″的长度为3,同时也要把P2向前移动3格如图(c)所示。

我们接着向前复制,直到到碰到第二个空格(如图2.4(d)所示)。和上次一样,我们再把P1向前移动1格,并把P2向前移动3格插入”%20″(如图2.4(e)所示)。此时P1和P2指向同一位置,表明所有空格都已经替换完毕。   从上面的分析我们可以看出,所有的字符都只复制(移动)一次,因此这个算法的时间效率是O(n),效率比较高。

C++ 中的替换空格

注:图中带有阴影的区域表示被移动的字符。

(a)把第一个指针指向原字符串的末尾,把第二个指针指向替换之后的字符串的末尾。

(b)依次复制字符串的内容,直至第一个指针碰到第一个空格。

(c)把倒数第一个空格替换成”%20″,接着,把第一个指针向前移动1格,把第二个指针向前移动3格。

(d)依次向前复制字符串中的字符,直至碰到空格。

(e)替换字符串中的倒数第二个空格,接着,把第一个指针向前移动1格,把第二个指针向前移动3格。

在面试的过程中,我们也可以和前面的分析一样,画一两个示意图,解释自己的思路,这样既能帮助我们理清思路,也能使我们和面试官的交流变得更加高效。在面试官肯定我们的思路之后,就可以开始写代码了。下面是参考代码:

测试用例:

1)输入的字符串中包含空格(空格位于字符串的最前面,空格位于字符串的最后面,空格位于字符串的中间,字符串中有连续多个空格)。
2)输入的字符串中没有空格。
3)特殊输入测试(字符串是个NULL指针、字符串是个空字符串、字符串只有一个空格字符、字符串中只有连续多个空格)。

//测试代码:

//主函数

效果如下:

C++ 中的替换空格

参考文献:何海涛.《剑指Offer名企面试官精讲典型编程题》.2012年.电子工业出版社


以上所述就是小编给大家介绍的《C++ 中的替换空格》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

《裂变:秒懂人工智能的基础课》

《裂变:秒懂人工智能的基础课》

王天一 / 电子工业出版社·博文视点 / 2018-6-13 / 59.00元

人工智能是指通过普通计算机程序实现的人类智能技术,这一学科不仅具有非凡的科学意义,对人类自身生存方式的影响也在不断加深。本书作为人工智能领域的入门读物,内容围绕人工智能的核心框架展开,具体包括数学基础知识、机器学习算法、人工神经网络原理、深度学习方法与实例、深度学习之外的人工智能和实践应用场景等模块。本书力图为人工智能初学者提供关于这一领域的全面认识,也为进一步的深入研究建立坚实的基础。一起来看看 《《裂变:秒懂人工智能的基础课》》 这本书的介绍吧!

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具