替换空格

你快乐吗?

Posted by bbkgl on September 26, 2019

替换空格


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--];
        }
	}
};