替换字符串中的空格

剑指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; 判断整数二进制表示中最右边…

经验收藏

http://hi.baidu.com/%D7%DF_%B4%F8%C4%E3%CC%FD%B8%E8%C8%A5/blog转载于:https://www.cnblogs.com/hx214blog/archive/2012/05/23/2514796.html

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

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

删除链表中指定节点,要求时间复杂度为O(1)

思路&#xff1a; &#xff08;1&#xff09;把要删除的节点的值与其next交换 &#xff08;2&#xff09;删除其next &#xff08;3&#xff09;完成 算法&#xff1a; 1 void DeleteNode(LinkList *p){2 if(p->nextNULL){3 free(p);4 pNULL;5 }…

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;但其背后的隐忧…

在窗口间移动按扭

// 在窗口间移动按扭 procedure TForm1.Button1Click(Sender: TObject);begin if Button1.ParentForm1 then begin button1.Caption:单击返回; Button1.Parent:Form2; Button1.Left : 232; Button1.Top : 88; end else begin …

不用加减乘除算加法

题目 写一个函数&#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…

oss/bss/mss转自搜搜百科

BSS:Business support system 业务支撑系统 OSS:Operation support system 运营支撑系统 MSS:Management Support System 管理支撑系统 (前二者又合称 BOSS:Business and Operation support system ,电信业务运营支持系统)在 企业(特别在是电信行业)IT 战略规划中占据了重要地…

模拟实现string其中的一些知识点

知识点列举 使用初始化列表的好处拷贝构造的形参为&与值的区别深拷贝与浅拷贝使用&的好处形参使用const引用的好处 使用初始化列表的好处 类成员中存在常量&#xff0c;如const int a,只能用初始化不能复制类成员中存在引用&#xff0c;同样只能使用初始化不能赋值。…

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

对抗性攻击欺骗图像识别算法将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;或者说突触。由此获得的图像数据库可帮助研究人员描绘支撑果蝇嗅闻、嗡嗡叫…

浅谈野指针

什么是野指针&#xff1f; 野指针并不是NULL指针&#xff0c;它是一个指向“垃圾”内存的指针&#xff0c;也就是说指向的地址是随机的&#xff0c;无法得知他的地址&#xff0c;操作系统自动对其进行初始化。   在计算机中&#xff0c;内存的分配由操作系统来管理&#xff0…

转: Linux下单网卡多vlan多虚拟机

#启动xen服务&#xff1a;xend start#列出虚拟机xm list#startxm create -c 虚拟机名#进入虚拟机xm console 虚拟机名#退出虚拟机ctrl]#关闭xm shutdown linux bridge实现了ieee 802.1d协议&#xff0c;这个实现&#xff0c;不能支持VLAN的功能。也就是说&#xff0c;这个实现&…