C++简单易懂题解
替换空格
http://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423
length给定的是char字符串申请的长度,而不是实际的字符数
扫描一遍,arraty[i]!='\0'跳出,先统计实际字符数,即实际长度len,和‘ ’个数count
一个' '-->'%20',长度增加2,则改变后的长度应为len+count*2,若改长度>length,则直接return
str[len+count*2]='\0',新长度的末尾加上结束符,不然不能全A
for循环,从i=len-1,向后挪就好了;遇上字符,str[i+count2]=str[i];遇上空格,就在i+count2、i+count2-1、i+count2-2分别置为0、2、%,并且count--
因为有一个空格,空格后面的字符就会向后移2位,留出空间;有count个空格,就要向后移count*2位class Solution { public: void replaceSpace(char *str, int length) { int count = 0; int len = 0; while (str[len] != '\0') { count += str[len] == ' ' ? 1 : 0; len++; } if (count == 0 || len+count*2>length)return; str[len + count * 2] = '\0'; for (int i = len-1; i >= 0; i--) { if (str[i] == ' ') { str[i + 2*count] = '0'; str[i + 2*count -1] = '2'; str[i+2*count-2] = '%'; count--; } else { str[i+2*count] = str[i]; } if (count == 0) break; } return; } };