力扣每日一题:剑指offer05——替换空格

题目描述:

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

输入:s = “We are happy.”
输出:“We%20are%20happy.”

前言
力扣上评论区的许多大佬都已经给出了c++和java实现的方法,但我却没有找到用纯c语言实现的方法,所以我写了这篇博客用来解释这道题的纯c解法,解法可能不如上面两种语言的好,仅供参考~

思路:

这道题,首先要确保一个字符串的大小要足够装的下替换后的字符

经过观察发现:每有一个空格,字符串长度就增加2

解释:一个空格用来放’%’,剩下需要开辟两个额外空间来放置’2’和’0’

然后我们就可以先开辟一个新的字符数组存放我们的新字符串

新的字符串长度=原字符串长度+(空格个数*2)+1(这里的+1是为了存下字符串末尾的’\0’)

而计算空格的个数,需要遍历一下字符串

//准备工作
	int space_num = 0;
	int len = strlen(s);
	for (int i = 0; i < len; i++)
	{
		if (s[i] == ' ')
		{
			space_num++;//计算空格个数
		}
	}
	char* tmp = (char*)malloc(sizeof(char) * (len + space_num * 2 + 1));//开辟字符串

接下来就是替换了,我们采取从后往前替换的方式

一般用这种顺序操作可以防止数据的过多挪动

替换我们替换到(i+space_num*2)的位置上,因为需要留出足够的空间

等到遇到空格后,就换上"%20",然后space_num–;

画图解释

在这里插入图片描述
代码

char* replaceSpace(char* s) {
	int space_num = 0;
	int len = strlen(s);
	for (int i = 0; i < len; i++)
	{
		if (s[i] == ' ')
		{
			space_num++;
		}
	}
	char* tmp = (char*)malloc(sizeof(char) * (len + space_num * 2 + 1));
	for (int i = len; i >= 0; i--)
	{
		if (s[i] == ' ')
		{
			space_num--;
			tmp[i + space_num * 2] = '%';
			tmp[i + space_num * 2 + 1] = '2';
			tmp[i + space_num * 2 + 2] = '0';
		}
		else
		{
			tmp[i + space_num * 2] = s[i];
		}
	}
	return tmp;
}
  • 27
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东条希尔薇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值