替换字符串中的空格

剑指offer面试题

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

看到题目后的思路

看到这个题目后,我们首相应该想到的是:原来的一个空格字符,经过替换后就成了三个字符,因此字符会变长,那么很有可能会覆盖原来的字符。如果是在一个新创建的字符串上做替换,就可以有足够的空间,显然题目上没有明显的提出,那就应该在原来的字符串上做替换

伪代码实现

  1. 求出该字符串的长度和字符串中含有的空格数
  2. 求出替换后的字符串的总长度
  3. 准备两个指针pStr1,pStr2,pStr1指向原始字符串的末尾,pStr2指向替换后的字符串末尾
  4. 向前移动pStr1和pStr2,逐个将pStr1指向的字符拷贝到Pr2指向的位置,知道遇到第一个空格为止
  5. 遇到空格后,将pStr1向前移动一次,然后在pStr2之前插入“%20”,插入一个字符pStr2就要向前移动一次
  6. 继续向前移动pStr1和pStr2,逐个将pStr1指向的字符拷贝到pStr2指向的位置,遇到空格继续做“5”操作,直到pStr2和pStr1相等,说明空格已经全部替换完毕

思维图

在这里插入图片描述
(图片来源《剑指offer》)

c++代码实现

class Solution {
public:void replaceSpace(char *str, int length) {if (str == NULL && length <= 0)return;//如果是空直接返回int factlength = 0;//实际字符数int spacenumber = 0;//字符串中空格的数量int i = 0;while (str[i] != '\0'){++factlength;if (str[i] == ' '){++spacenumber;}++i;}//扩展第二个字符串,//空格的数量*2是因为“%20”一共三个字符,需要在原来每个空格的位置再加上两个字符的长度,才是第二个字符串的int newlength = factlength + spacenumber * 2;if (newlength > length){return;}//从后向前替换,这样会减少替换的次数char *pStr1 = str + factlength;char *pStr2 = str + newlength;//如果pStr2 <= pStr1 了,说明剩下的pStr2和pStr1的字符串相同了,也就没有“ ”了,就不用替换了while (pStr2 > pStr1 && pStr1 >= 0){if (*pStr1 == ' '){*pStr2-- = '0';*pStr2-- = '2';*pStr2-- = '%';}else{*pStr2-- = *pStr1;}--pStr1;}return;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类型,对象,线程栈和托管堆在运行时的相互关系(一)。

当系统加载一个CLR的进程&#xff0c;进程里面可能有多个线程&#xff0c;这时候系统会给这个进程创建一个大小为1M的线程栈。这个线程栈用来存放方法调用的实参&#xff0c;和方法内部定义的局部变量。下图展示了一个线程栈的栈内存。线程栈的存储是从高位内存地址向地位内存地…

阿里云发布三大人工智能产品:推动AI产业落地

来源&#xff1a;科技圈里那点事儿摘要&#xff1a; 近日&#xff0c;阿里云正式发布了三款人工智能产品&#xff1a;图像搜索、智能语音自学习平台以及机器翻译&#xff0c;进一步推动产业AI的落地。近日&#xff0c;阿里云正式发布了三款人工智能产品&#xff1a;图像搜索、智…

C/C++求一个整数的二进制中1的个数(用三种效率不同的方法实现)

题目&#xff1a; 实现一个函数&#xff0c;输入一个整数&#xff0c;输出该数二进制中1的个数。例如把9表示成二进制是1001&#xff0c;有2位是1&#xff0c;因此如果输入是9&#xff0c;该函数输出2 第一种解法&#xff08;死循环&#xff09; 判断整数二进制表示中最右边…

2018智能音频报告:智能音箱带来的智能音频和广播媒体的机遇

来源&#xff1a;199IT互联网数据中心摘要&#xff1a;前中国智能音箱正热&#xff0c;阿里巴巴、京东、百度纷纷发布自己的智能音箱产品&#xff0c;大打价格战&#xff0c;希望以绝对底价抢占市场。前中国智能音箱正热&#xff0c;阿里巴巴、京东、百度纷纷发布自己的智能音箱…

c++中求前n项和(这代码不得不让我佩服)

今天在牛客网上刷题&#xff0c;遇到了这道题&#xff0c;最后我看到一位大佬的代码让我感觉的还差很多&#xff01;&#xff01;&#xff01; 题目 求123…n&#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&am…

基于Arduino和HC-SR04的超声波测距系统设计

本文介绍了如何使用Arduino和HC-SR04超声波传感器设计并构建一个简单的超声波测距系统。我们将详细讨论硬件连线和编程步骤&#xff0c;并提供完整的Arduino代码。此系统可以应用于各种需要测量距离的项目&#xff0c;例如智能车辆、机器人和安防系统。 引言&#xff1a; 超声…

中国AI企业吸金旺但90%亏损 今年将迎倒闭潮

来源&#xff1a;网易智能摘要&#xff1a; 据报道&#xff0c;自2017年人工智能成为国家战略目标后&#xff0c;相关产业迎来飞速发展机遇&#xff0c;更成为全球吸金能力最强的产业之一。2017全年&#xff0c;大陆AI企业的融资总额已占到全球的7成&#xff0c;但其背后的隐忧…

不用加减乘除算加法

题目 写一个函数&#xff0c;求两个整数之和&#xff0c;要求在函数体内不得使用、-、*、/四则运算符号。 思路 &#xff08;一&#xff09;首先看我们平时的十进制是如何做的&#xff1a; 65 &#xff0c;三步曲&#xff01;&#xff01;&#xff01; 相加各位的值&#xf…

《Nature》纪念人工智能60周年专题:深度学习综述

来源&#xff1a;网络大数据摘要&#xff1a;本文是《Nature》杂志为纪念人工智能60周年而专门推出的深度学习综述&#xff0c;也是Hinton、LeCun和Bengio三位大神首次合写同一篇文章。本文是《Nature》杂志为纪念人工智能60周年而专门推出的深度学习综述&#xff0c;也是Hinto…

对抗性攻击轻松愚弄人工智能

对抗性攻击欺骗图像识别算法将3D打印乌龟认作步枪。来源&#xff1a;中国科学报摘要&#xff1a;在日前于瑞典斯德哥尔摩举行的国际机器学习会议上&#xff0c;一群研究人员描述了他们的3D打印乌龟。在日前于瑞典斯德哥尔摩举行的国际机器学习会议上&#xff0c;一群研究人员描…

浅谈C语言指针

什么是指针&#xff1f; 在计算机科学中&#xff0c;指针&#xff08;Pointer&#xff09;是编程语言中的一个对象&#xff0c;利用地址&#xff0c;它的值直接指向存在电脑存储器中的另一个地方的值。由于通过地址能找到所需的变量单位&#xff0c;可以说&#xff0c;地址指向…

转:EXCEL数据有效性设置

原文&#xff1a; http://hi.baidu.com/guosq/blog/item/88b37cd5bd367cfda144dfa0.html 先看图&#xff0c;有学生成绩表格&#xff0c;录入要求&#xff1a; 1. 成绩范围&#xff1a; 0 - 100&#xff1b; 2. 课程&#xff1a;只能是语文、数学、英语。 操作步骤&#xff1a;…

科学家绘制果蝇完整大脑高清图—可借此追踪任何两个神经元之间的连接

研究人员利用电子显微镜重建了果蝇的一系列神经元。来源&#xff1a;中国科学报科学家近日首次对黑腹果蝇的整个大脑进行了足够详细的成像&#xff0c;从而能探测每个神经元之间的单独连接&#xff0c;或者说突触。由此获得的图像数据库可帮助研究人员描绘支撑果蝇嗅闻、嗡嗡叫…

谈谈 Android 有多成功!欧盟这么罚它

选自 | Stratechery 作者 | Ben Thompson 编译 | 网易智能 参与 | 乐邦西方知名科技博主本汤普森&#xff08;Ben Thompson&#xff09;近日发布题为“欧盟VS Android”的文章&#xff0c;称谷歌固然有其违法的地方&#xff0c;但欧盟剥夺谷歌从其冒着高风险斥资数十亿美元开发…

《纽约时报》评中国技术热潮:追捧“上菜机器人”等无意义的新奇产品

来源&#xff1a;纽约时报编译&#xff1a;全球技术地图上海的机器人魔力餐厅里的非人类服务员只能做到这一步。在食客们拍完照片和视频后&#xff0c;常规的服务员会上前进行服务。上海——能读人想法的耳机什么都没读出来。检测火灾的机器人已被宣布为安全隐患。机器人服务员…

运算符的优先级(Operator Precedence)总结(表)

概念 在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象&#xff1b;由于表达式有多种运算&#xff0c;不同的结合顺序可能得出不同结果甚至出现错误运算错误&#xff0c;因为当表达式中含多种运算时&#xff0c;必须按一定顺序进行结合&#xff…

10家最具创新性的机器学习公司

来源&#xff1a;资本实验室摘要&#xff1a;机器学习是实现人工智能的一种方法&#xff0c;通过使用算法来解析数据、从中学习&#xff0c;然后对现实世界中的事件做出预测和判断。机器学习已经在各个行业得到广泛应用。近日《Analytics Insight》杂志评选出10家最具创新性的机…

李飞飞公布谷歌云TPU、AutoML、行业方案等多项进展,AI云计算成谷歌全新增长点...

来源&#xff1a;全球人工智能摘要&#xff1a;7 月 24 日-26 日&#xff0c;Google Cloud NEXT 18 大会在美国旧金山举行。7 月 24 日-26 日&#xff0c;Google Cloud NEXT 18 大会在美国旧金山举行&#xff0c;Google Cloud作为谷歌人工智能未来业务发展的基础性平台&#xf…

Gartner:2018年十大科技趋势与其对IT和执行的影响

来源&#xff1a;云技术实践摘要&#xff1a;Gartner每年发布的十大战略科技趋势一直备受关注&#xff0c;但企业往往会将50%以上的预算花在基础设施和执行上。因此&#xff0c;了解十大科技趋势与其对IT和执行的影响十分必要。在本周的Gartner CIO峰会期间&#xff0c;Gartner…

C++读取INI文件

Windows操作系统专门为此提供了6个API函数来对配置设置文件进行读、写&#xff1a;GetPrivateProfileInt() 从私有初始化文件获取整型数值GetPrivateProfileString() 从私有初始化文件获取字符串型值GetProfileInt 从win.ini 获取整数值GetProfileString 从win.ini 获取字符串值…