标签:空格替换
实现一个函数,把字符串中的每个空格替换成"%20"。例如输入"we are happy",则输出"we%20are%20happy".思路:看到这个题目,我们首先想到的是原来一个字符串,替换之后成为'%','2','0'三个字符串,因此字符串会变长,我们有两种方法可以实现替换,一是在原有的 字符串上替换,则有可能覆盖修改在该字符串后面的内存。二是创建新的字符串并在新的字符串上做替换。
第一种方法是在原有字符串上做替换,从头到尾遍历字符串,每一次遇到空格的时候做替换,由于把一个字符替换成三个,所以替换时必须把空格后面的字符都向后移动两个字节,遇到第二个空格,第二个空格后的字符又要移动两个字节,以此类推,每次遇到空格时,空格后面的字符都要向后移动两个。会增加时间复杂度。
第二种方法是创建新的字符串,我们先遍历一遍字符串,每次的空格用count标记,找到空格的总数,并且可以计算出替换之后字符串的总长度。就本题而言,创建新的字符串的长度为newend=oldend+count*2,我们可以将newend和oldend看成两个数组,用两个数组的下标进行替换,while(oldend<newend),如果str[oldend]!=' '的时候,将oldend的最后一个给newend的最后一个,倒数第二个给新的倒数第二个,以此类推,当遇到空格时,将'0','2','%'依次附上去,oldend的下标——。
代码实现如下:
#include <stdio.h> #include <string.h> void change (char *str) { int len=strlen(str); int count=0; int oldend=len; int newend; char *ptr = str; while (*ptr!='\0') { if(*ptr==' ') { count++; } ptr++; }//遍历数组,找到空格数 newend=oldend+count*2;//创建新的长度 while(oldend<newend) { if (str[oldend] != ' ') { str[newend--] = str[oldend--]; } else { str[newend--] = '0'; str[newend--] = '2'; str[newend--] = '%'; oldend--; } } } int main() { char arr[30]="we are happy."; change (arr); puts(arr); return 0; }
标签:空格替换
原文地址:http://blog.51cto.com/12951882/2044466