替换空格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了替换空格相关的知识,希望对你有一定的参考价值。

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


以上是关于替换空格的主要内容,如果未能解决你的问题,请参考以下文章

如何从主要活动中替换片段

用片段替换时操作栏向下移动

如何在android studio中用另一个片段替换一个片段

用片段替换某些东西

试图替换片段,但它一直显示相同的片段

正则表达式替换markdown文件代码块标记中的所有空格