替换空格 --剑指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--]; } } } };