记剑指offer05替换空格
问题描述
题目意义
在编程中,如果URL参数(是Internet上用来描述信息资源的字符串)中含有特殊字符,使服务器端无法正确识别,则需要将特殊字符进行转换,转换规则是在“%”后面加上ASCII码的两位十六进制数表示,以空格为例,空格的ASCII码是32,换为十六进制表示是0x20,所以空格需要被替换为“%20”。
解题思路:
一、. C
首先题目要求将一个字符替换为三个字符,每替换一个空格需要新增两个字符大小的空间,替换之后的字符串长度会增加,所以可想到两种方法。
1.将原始字符串定义足够长,可在原始数组中进行移位操作。考虑极限情况,如果原数组中全是空格,替换后的数组大小,则需要为以前的三倍,定义数组长度为字符串长度的三倍。
2.首先遍历原始字符串数组,记录空格数和数组长度,重新定义一个数组,在新的数组上进行移位赋值操作。
其次在移位时需要考虑对原始数组的遍历方向,可采用从前往后或者从后向前。下面分别分析这两种移位方法。
1.从前向后
如图所示,第一行阴影部分表示遇到第一个空格时,需要进行移位的位置,第二行的阴影表示,遇到第二个空格时,需要进行移位的位置,加黑的部分表示需要进行两次移位的位置。
2.从后往前
不管使用哪种方法进行移位的时候都要记录原始数组的长度和空格数量,需要动态分配数组空间,扩展数组大小至少为空格数目的两倍。
需要两个数组,先计算出新数组的长度,建立新数组,同时遍历两个数组,在空格位置进行替换,其余位置直接赋值给新数组,直到遍历完原始数组。
char* replaceSpace(char* s){
if(s==NULL){
return NULL;