栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

题目描述:

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

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

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

思路:

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

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

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

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

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

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

//准备工作
	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;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339992.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号