码迷,mamicode.com
首页 > 其他好文 > 详细

替换空格

时间:2017-11-26 20:36:15      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:空格替换

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!