题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。(点此处,直接跳转至LeetCode原题出处)
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
解析
解法一:
使用范围for,定义,ret为一个定义的字符串,ch为从参数传来的字符串中取得的字符。判断字符是否为空格,若不为空格,只需要执行“ret += ch”,若为空格只需要执行“ret +=“%20” ”;最后返回ret的值即可。
class Solution {
public:
string replaceSpace(string s) {
string ret;
for(auto ch:s)
{
if(ch != ' ')
{
ret += ch;
}
else
{
ret += "%20";
}
}
return ret;
}
};
执行结果:

解法二:
考虑到上述解法的效率问题,由于每次“+=”都会增容,会有消耗,这里改进了一点,可以提前开好空间。
class Solution {
public:
string replaceSpace(string s) {
size_t spaceNum = 0; //统计空格
for(auto ch : s)
{
if(ch == ' ')
++spaceNum;
}
//直接计算增容,避免+=每次都增容,增容对内存的消耗,提前开空间
string ret;
ret.reserve(s.size() + spaceNum*2);//提前开空间
for(auto ch : s)
{
if(ch != ' ')
{
ret += ch;
}
else
{
ret += "%20";
}
}
return ret;
}
};
执行结果:

该博客讨论了如何在C++中实现将字符串中的空格替换为%20的两种方法。解法一是简单的迭代,而解法二通过预计算空格数量并提前开足够的空间来提高效率,避免频繁的字符串扩容操作。

被折叠的 条评论
为什么被折叠?



