题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。
应用背景:在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在'%'后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成"%20"。再比如'#'的ASCII码为35,即十六进制的0x23,它在URL中被替换为"%23"。
知识长进:
- 为了节省内存,C/C++把常量字符串放到单独的一个内存区域,当几个指针赋值给相同的常量字符串时,他们实际上会指向相同的内存。
- 在合并两个数组(包括字符串)时,如果从前往后复制每个数字则需要重复移动数字多次,那么可以逆向思维,考虑从后往前复制,这样子可以减少移动的次数,从而提高效率,但是要注意内存覆盖问题。
- 在清楚空格中,清除空格后所得到的字符串要比原先的字符串要短,我们从头到尾进行清楚空格的话就不会覆盖到空格后面的字符,所以我们可以从头开始清除,效率反而比较高。
相比源代码的改进点:因为C/C++中每个字符串都以字符‘