题目:https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking
思路:
1.我们知道字符串的遍历无非是从左到右和从右到左两种。
1)如果从左到右,会发现如果遇到空格,会将原来的字符覆盖。于是,此方法不行。
2)那么就考虑从右向左,遇到空格,就填充“20%“,否则将原字符移动应该呆的位置。
2.具体如图:
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == nullptr || length <= 0) return;
int originalLength = 0;
int numberOfBlank = 0;
int i = 0;
while(str[i]!='\0'){
++originalLength;
if(str[i] == ' '){
++numberOfBlank;
}
++i;
}
if(!numberOfBlank) return;
//每替换一空格,长度增加2
int newLength = originalLength + numberOfBlank * 2;
//originalLength: 是原字符串长度
//索引是从0开始
//str[indexOfOriginal]: '\0'
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){
if(str[indexOfOriginal] == ' '){
str[indexOfNew--] = '0';
str[indexOfNew--] = '2';
str[indexOfNew--] = '%';
}else{
str[indexOfNew--] = str[indexOfOriginal];
}
--indexOfOriginal;
}
}
};