题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:
1)统计字符串的长度和空格的个数
2)定义两个指针分别指向原字符串的末尾和替换后字符串的末尾
3)移动两指针,遇到空格进行替换,直到两指针相遇结束
代码实现:
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == NULL || length <= 0){
return;
}
int strLen = 0;//字符串实际长度
int spaceNum = 0;//空格个数
int i = 0;
while(str[i] != '\0'){
if(str[i] == ' '){
spaceNum++;
}
strLen++;
i++;
}
int p1 = strLen+ 1;//指针p1指向原字符串末尾
int p2 = strLen + 1 + spaceNum*2;//指针p2指向替换后字符串末尾
if(p2 > length){
return;
}
while(p1>=0 && p1 < p2){
if(str[p1] == ' '){//遇到空格插入“%20”
p1--;
str[p2--] = '0';
str[p2--] = '2';
str[p2--] = '%';
}else{//其他情况直接往后移
str[p2--] = str[p1--];
}
}
}
};