原题描述
编写一个方法,将字符串中的空格全部替换成“%20”。假定字符串尾部有足够的空间存放新增字符,并且知道字符串的真实长度。
算法
Tips:
- 处理字符串问题的时候,常见的:从尾部编辑,从后向前反向操作
- 关于C++的cin使用用法
Ideas:
- 遍历一遍,数出空格数,并计算新的字符串长度
- 再从后往前遍历一遍,并修改原数组
Algo:
定义spaceCounts,newLength,i(循环变量)
遍历原数组:
判断[i]处是否等于' ':
若是,则找到一个空格,spaceCounts++
根据spaceCounts计算新的字符串长度newLength
赋值新字符串的'\0'结束符
从 length-1 开始向前遍历原串:
如果 [i] 处是 ' ':
对新字符串的3个位置进行赋值
newLength-=3
否则 :
把旧串[i] 复制到 新串的相应位置
newLength-=1
C++代码
void replaceSpaces(char* str, int length) {
int spaceCounts = 0, newLength = -1, i = -1;
for (i = 0; i < length; i++) {
if (str[i] == ' ') {
spaceCounts++;
}
}
newLength = length + 2*spaceCounts;
str[newLength] = '\0';
for (i = length - 1; i >= 0; i--) {
if (str[i] == ' ') {
str[newLength - 1] = '0';
str[newLength - 2] = '2';
str[newLength - 3] = '%';
newLength -= 3;
}
else {
str[newLength - 1] = str[i];
newLength -= 1;
}
}
}
Bug Free Procedure
- 2017.01.16 Bingo!!!一次性AC