0%

替换空格

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

考虑到每将一个空格替换后,即需要将后续字符后移,并整体扩充2个字节,为了避免不必要的移动和扩充,我们可以先计算替换后的字符串的长度,再自右向左替换空格,此时每个非空格字符仅仅被移动一次,且仅需要对字符串进行一次扩充。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public:
void replaceSpace(char *str,int length) {
char *src = str, *dst = str;
for (; *src != '\0'; src++)
{
if (*src == ' ')
{
dst += 3;
}
else
{
dst++;
}
}
for (; src >= str; src--)
{
const char temp = *src;
if (temp == ' ')
{
*dst = '0';
dst --;
*dst = '2';
dst --;
*dst = '%';
dst--;
}
else
{
*dst = temp;
dst--;
}
}
}
};