替换空格

题目:请实现一个函数,将字符串中的每个空格替换成%20,例如"we are happy"替换成"we%20are%20happy"


看到这个题目第一反应是:是在原来字符串的基础上修改,还是在copy给另个字符串


第一种:在原来的字符串上修改,这时候需要注意的问题是原来的字符的长度够不够的问题,如果不够这题目就没法做了,假设原来的字符串足够大。这时候想起了直接插入排序和简单选择排序的一点区别:直接插入排序会不断的移动元素原因是不确定每个元素的最终位置,简单选择排序则是不移动元素,因为每一次选出来的元素的位置是确定。那么道题目的问题也在这里如果从正序扫描加替换那么肯定会重复移动一些元素。所以应该先确定每个元素的位置,即找出空格的数量那么所有元素的最终位置也就确定了。

void Replace(char string[])
{
	if(string == null)
	{
		return; 
	}

	int num=0;//记录空格的数量
	int length=0;//记录原来的长度

	while(string[i] != '\0')
	{
		length++;

		if(string[i]==' ')
		{
			num++;
		}
	}//while
	
	int length_now = length+2*num;//现在字符串的长度

	while(length>0)
	{
		if(string[length-1] != ' ')
		{
			string[length_now-1] = string[length-1];
			length_now--;
			length--;
		}
		else
		{
			string[length_now-1] = '0';
			string[length_now-2] = '2';
			string[length_now-3] = '%';
			length--;
			length_now -= 3;
		}
	}
}

写完后看了下答案发现自己sb了,最后的
<span style="white-space:pre">			</span>string[length_now-1] = '0';
			string[length_now-2] = '2';
			string[length_now-3] = '%';
的这几句写的实在是业余,直接都写成length_now--;就可以了而且length_now -= 3;也可以省略了if中的也是一样。看来自己还是很业余啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值