请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
考虑到每将一个空格替换后,即需要将后续字符后移,并整体扩充2个字节,为了避免不必要的移动和扩充,我们可以先计算替换后的字符串的长度,再自右向左替换空格,此时每个非空格字符仅仅被移动一次,且仅需要对字符串进行一次扩充。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: void replaceSpace(char *str,int length) { char *src = str, *dst = str; for (; *src != '\0'; src++) { if (*src == ' ') { dst += 3; } else { dst++; } } for (; src >= str; src--) { const char temp = *src; if (temp == ' ') { *dst = '0'; dst --; *dst = '2'; dst --; *dst = '%'; dst--; } else { *dst = temp; dst--; } } } };
|