算法题: 去除数组中空格

实现一个函数将字符串中的空格替换成#20

输入:ni hao ya
输出:ni%20hao%20ya

其中我们有两个思路,一个是O(N²)的复杂度,将数组遍历,然后在空格处插入#20,但是每次插入都需要后移内存,十分的费时间,所以我们还是从中寻找规律

我们先遍历一遍数组,找出他其中的空格数量,用两个指针,一个指向数组尾部,一个指向数组尾部+最后要的偏移量,然后向前遍历,两个指针一起向后移动,后面的指针不断的去拷贝前面指针的数据,当遇到空格的时候,后面的指针去做赋值操作#20
:其中需要注意的就是数组越界和字符串尾0的标志

代码实现
void arry_change(char buf[], int len)
{
	if (buf == nullptr || len <= 0)
		return;
	int bank_num = 0;
	int originalen = 0;
	int i = 0;
	while (buf[i] != '\0')
	{
		if (buf[i] == ' ')
			bank_num++;
		originalen++;
		i++;
	}
	int new_len = originalen + 2 * bank_num;
	if (new_len > len) //如果数组越界的话就返回
		return;
	//核心移动的实现
	while (new_len !=originalen &&originalen>=0)
	{
		if (buf[originalen] == ' ')
		{
			buf[new_len--] = '0';
			buf[new_len--] = '2';
			buf[new_len--] = '%';
		}
		else
		{
			buf[new_len--] = buf[originalen];
		}
		originalen--;;
	}
}
测试用例
  1. 有空格的字符串
  2. 无空格的字符串
  3. 特殊输入,数组越界,空指针,数组中有多个连续空格,输入只有一个空格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值