剑指offer-字符串替换

来源:互联网 发布:淘宝怎么查看购物车 编辑:程序博客网 时间:2024/05/18 03:16

实现一个函数,将字符串中的空格都替换成“%20”,比如输入“we  are  happy”,则输出变为“we%20are%20happy”

这道题的解题思路我们可以从前往后复制,遇到空格就给它替换成要求的,但是这样就有的字符就移动了多次,所以可以从后往前去复制,第一步先统计有多少个空格,那就知道了应该往后移动多少个位置,接下来可以定义两个指针。

void ReplaceBlank(char string[],int length){if (string == NULL || length <= 0)return;int originallength=0;int endlength=0;int blank = 0;int i = 0;while (string[i] != '\0'){++originallength;if (string[i] == ' '){    ++blank;}++i;}endlength = originallength + 2 * blank;if (endlength > length)return;int indexstart = originallength;int indexnow = endlength;while (indexstart >= 0 && indexnow > indexstart){if (string[indexstart] == ' '){string[indexnow--] = '0';string[indexnow--] = '2';string[indexnow--] = '%';}else{string[indexnow--] = string[indexstart];}--indexstart;}}
至于为什么循环这一句截止条件为

while (indexstart >= 0 && indexnow > indexstart)
刚开始不太明白为什么要一直改变后的长度大于改变之前的,因为是在原字符做的呀,当不大于时保持原状就可以了,没有必要还复制嘛。

结果图如下:



0 0