题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
图2.4从后往前把字符串中的空格替换成“%20”的过程
注:图中带有阴影的区域表示被移动的字符。
(a)把第一个指针指向字符串的末尾,把第二个指针指向替换之后的字符串的末尾。
(b)依次复制字符串的内容,直至第一个指针碰到第一个空格。
(c)把第一个空格替换成“%20”,把第一个指针向前移动1格,把第二个指针向前移动3格。
(d)依次向前复制字符串中的字符,直至碰到空格。
(e)替换字符串中的倒数第二个空格,把第一个指针向前移动1格,把第二个指针向前移动3格。
class Solution {
public:
void replaceSpace(char *str,int length) {
//先判断是否为空字符数组
if(str == NULL || length <= 0)
return;
//计算字符数组的实际长度(带\0)/begin
int trueLength = 0;
char* pTemp = str;
int count = 0;
for(int i=0;str[i] != '\0';i++){
trueLength++;
if(str[i] == ' ')
count++;
}
trueLength++;
int newlength = count*2+trueLength;
//计算字符数组的实际长度(带\0)/end/
if(newlength > length)//如果替换空格后所需的字符数组长度小于length,则返回
return;
//进行替换begin/
int indexOriginal = trueLength-1;
int indexNew = newlength-1;
while(indexOriginal >= 0 && indexNew >= 0){
if(str[indexOriginal] == ' '){
str[indexNew--] = '0';
str[indexNew--] = '2';
str[indexNew--] = '%';
}
else{
str[indexNew--] = str[indexOriginal];
}
indexOriginal--;
}
//进行替换end/
}
};