原题描述
编写一个方法,将字符串中的空格全部替换成“%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