替换空格 --剑指offer

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

java直接用函数就可以解决 没有意义 所以用c++写。

思路:这题如果允许开辟新的空间 也是比较简单的,但是如果不允许开辟新的空间,而且保证原有的字符串长度够,那么该怎么解决才是重点。

设置两个i,j标志,计算出替换后的长度 ,i表示原先字符串最后的下标,j表示计算后字符串最后的下标,然后从后往前走就完了。

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == nullptr || length <= 0){
            return;
                                   }
        int space_count=0;
//计算空格的数量,方便计算替换后字符串的长度
        for(int i =0;i <length;i++){
            if(str[i] == ' '){
                space_count ++;
            }
        }
        int nlength=2*space_count + length;
        int i = length-1;
        int j = nlength-1;;
        while(i >= 0){
            if(str[i] == ' '){
                str[j--]='0';
                str[j--]='2';
                str[j--]='%';
                i --;
            }else{
                str[j--] = str[i--];
            }
        }
    }
};
原文地址:https://www.cnblogs.com/nlw-blog/p/12409009.html