您的位置:首页 > 其它

替换字符串中的空格

2018-01-03 09:38 295 查看
题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

解题思路:字符串中空格替换有两种方式,一种是遍历一遍,将源字符串直接复制到新字符串,遇到空格替换之即可,这种方法会增加空间复杂度。另一种方法是,先统计源字符串中空格数,获得替换后字符串的长度,再从后向前进行替换。

class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == ""){
return;
}
//统计字符串str中空格数,以及字符串的总长度,由于是通过指针移动统计,因而统计结束之后需要将指针复位
int originLength = 0, blankCount = 0;
while(*str != '\0'){
originLength ++;
if(*str == ' '){
blankCount ++;
}
str ++;
}
// 指针复位
str -= originLength;
int totalLength = originLength + 2 * blankCount;
if(totalLength > length)
return;
// 从最后一个字符开始替换,当两个字符串指针相遇时,替换结束
while(originLength != totalLength){
char a = str[originLength];
if ( a == ' '){
str[totalLength--] = '0';
str[totalLength--] = '2';
str[totalLength--] = '%';
originLength--;
}
else{
str[totalLength] = str[originLength];
originLength--;
totalLength--;
}
}
}
};


注意:

1. 在上述解题中,通过指针移动操作统计字符串的长度以及空格数。由于后面还要继续使用该字符串指针,因而要么创建一个临时指针,要么在统计完之后将指针复位。

2. 进行字符串的复制时,字符串结束符’\0’也需要复制,防止出现问题。

947b
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: