题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
首先我们先算出整个字符串的长度,还有总共多少个空格。因为空格只占一个字节,但是"%20"占两个字节,所以新的容量是原来字符串长度+空格数*2
,然后把新的容量与给定的字符串总大小作比较,如果大于给定的大小,就说明给的用例出错了,直接返回。
如果没出错,从原来字符串末尾开始遍历,如果是空格,则依次附给新字符串同时两个下标往前走,如果不是则直接赋值两个下标也往前走。
实现
class Solution {
public:void replaceSpace(char *str,int length) {if(str == nullptr||length == 0)return ;int i = 0;int num = 0; //空格数int reallength = 0; //实际长度while(str[i] != '\0'){reallength++;if(str[i] == ' '){num++;}++i;}int newlength = reallength + num*2;if(newlength > length)return ;int jreal = reallength;int jnew = newlength;while(jreal >= 0 && jnew > jreal){if(str[jreal] == ' '){str[jnew--] = '0';str[jnew--] = '2';str[jnew--] = '%';}else{str[jnew--] = str[jreal];}--jreal;}return ;}
};