《剑指Offer》面试题5:替换空格

要求:替换空格

请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出”We%20are%20happy.”。

测试用例:

  1. 输入的字符串中包含空格(空格位于字符串的最前面;空格位于字符串的最后面;空格位于字符串的中间;字符串中有连续多个空格)。
  2. 输入的字符串不含有空格
  3. 特殊输入测试(字符串是一个nullptr指针;字符串是一个空字符串;字符串只有一个空格字符;字符串中有连续多个空格)。

本题考点:

  1. 考查对字符串的编程能力。
  2. 考查分析时间效率的能力。我们要能清晰地分析出两种不同方法的时间效率各是多少。
  3. 考查对内存覆盖是否有高度的警惕。在分析得到字符串会变长之后,我们能够意识到潜在的问题,并主动和面试官沟通以寻找问题的解决方案。
  4. 考查思维能力。在从前到后替换的思路被面试官否定之后,我们能迅速想到从后往前替换的方法,这是解决此题的关键。

源代码:

#include <iostream>
using namespace std;

/********************************************************************
 * 参数:
 *		str:			字符串
 *		length:			为字符数组str的总容量,大于或等于字符串str的实际长度
********************************************************************/
void ReplaceBlank(char str[], int length)
{
	//无效输入(空指针或者空字符)
	if (nullptr == str || length <= 0)
		return;

	//有效输入
	int i = 0;
	int originalLength = 0;		//字符串str的实际长度		
	int numberOfBlank = 0;		//字符串中的空格个数
	while ('\0' != str[i])
	{
		if (' ' == str[i])
			++numberOfBlank;

		++originalLength;
		++i;
	}

	//newLength 为把空格替换成'%20'之后的长度
	int newLength = originalLength + (numberOfBlank << 1);
	if (length >= newLength)
	{
		int k = newLength;
		int j = originalLength;
		for (; j >= 0; --j)
		{
			if ( ' ' != str[j])
			{
				str[k--] = str[j];
			}
			else
			{
				str[k--] = '0';
				str[k--] = '2';
				str[k--] = '%';
			}
		}
	}
}

参考代码:https://github.com/zhedahht/CodingInterviewChinese2/tree/master/05_ReplaceSpaces
自己代码:https://github.com/quinta2019/Offer/tree/master/05_Q_ReplaceSpaces

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值