算法入门04替换空格
Posted 2021dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法入门04替换空格相关的知识,希望对你有一定的参考价值。
核心考点:字符串相关,特性观察,临界条件处理
请实现一个函数,将一个字符串中的每个空格替换成"%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理解为需要我们进行替换的字符串长度,而默认字符串已经为我们预留了足够的空间大小进行空格替换。
以上是关于算法入门04替换空格的主要内容,如果未能解决你的问题,请参考以下文章