替换空格
C++,思路:
- 从前往后遍历一次,统计空格的个数
cnt
; - 得到替换后字符串的总长度应该为
length + cnt + 2
; - 从后往前遍历,指针
left
在原字符串尾,指针right
在新字符串尾,注意left
指针开始位是最后的\0
; - 如果碰到的是空格,将空格替换,同时
right
应该移动三次,而left
移动一次; - 如果不是空格,直接复制就行了;
- 循环跳出条件就是当
left == right
,这时候说明前面已经没有空格了,不需要替换。
代码如下:
class Solution {
public:
void replaceSpace(char *str,int length) {
int cnt = 0;
for (int i = 0; i < length; i++)
if (str[i] == ' ') cnt++;
int len = length + cnt * 2;
int left = length, right = len;
while (left < right && left >= 0 && right >= 0) {
if (str[left] == ' ') {
str[right--] = '0';
str[right--] = '2';
str[right--] = '%';
left--;
}
else str[right--] = str[left--];
}
}
};