标签:空格替换
实现一个函数,把字符串中的每个空格替换成"%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