【算法入门04】替换空格

本文解析如何使用C++实现一个函数,将输入字符串中的每个空格替换成%20。涉及步骤包括空格计数、新长度计算及后向前填充技巧。重点在于处理字符串操作的临界条件和高效替换策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

核心考点:字符串相关,特性观察,临界条件处理

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

解析:
替换空格大致可分为以下三个步骤:
1、遍历一遍字符串,统计字符串当中的空格数count。

2、通过空格数count算出替换后字符串的新长度newlength。
因为一个空格字符会被替换为三个字符,所以替换后字符串的新长度newlength = length + 2*count。

3、从后向前对字符串进行填充。
计算出替换后字符串的长度后,我们可以在原字符串当中,从后往前进行填充。若遇到的不是空格,则将遍历到的字符从后往前进行填充。
在这里插入图片描述
若遇到的是空格,则从后往前填充字符’0’,‘2’,’%’。
在这里插入图片描述
如此进行下去,直到字符串遍历完毕即可得到替换后的字符串。
在这里插入图片描述

class Solution {
public:
	void replaceSpace(char *str, int length) {
		int count = 0; //记录字符串中空格的个数
		//遍历字符串,统计字符串当中的空格数
		for (int i = 0; i < length; i++)
		{
			if (str[i] == ' ')
				count++;
		}
		//计算替换后字符串的新长度
		int newlength = length + 2 * count;
		//从后向前对字符串进行填充
		while (newlength >= 0)
		{
			if (str[length] == ' ') //遇到的是空格,则从后往前填充字符'0','2','%'
			{
				str[newlength--] = '0';
				str[newlength--] = '2';
				str[newlength--] = '%';
			}
			else //遇到的不是空格,则将遍历到的字符从后往前进行填充
			{
				str[newlength--] = str[length];
			}
			length--;
		}
	}
};

说明一下:
因为所给函数接口没有使用引用传参,所以我们无法在函数体内部对字符串进行增容操作,在此我们只能将参数length理解为需要我们进行替换的字符串长度,而默认字符串已经为我们预留了足够的空间大小进行空格替换。

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021dragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值