《剑指Offer——5:替换空格》代码

Posted 穿迷彩服的鲨鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《剑指Offer——5:替换空格》代码相关的知识,希望对你有一定的参考价值。


前言

//==================================================================
// 《剑指Offer——5:替换空格》代码
// 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,
// 则输出“We%20are%20happy.”。
//==================================================================


一、示例

示例 1:

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

二、代码解析

1.新建.cpp文件

代码如下(示例):

//==================================================================
// 《剑指Offer——5:替换空格》代码
// 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,
// 则输出“We%20are%20happy.”。
//==================================================================


#include <iostream>
using namespace std;

class Solution
{
public:
	/*暴力解法*/
	string replaceSpace(string s)
	{
		int len = s.length();
		string temp = "";
		for (int i = 0; i < len; i++)
		{
			if (s[i] == ' ')
			{
				temp += "%20";
			}
			else
			{
				temp += s[i];
			}
		}
		return temp;
	}
};

/*双指针法*/
/*length为字符数组str的总容量,大于或等于字符串str的实际长度*/
void ReplaceBlank(char str[], int length)
{
	if (str == nullptr && length <= 0)
	{
		return;
	}
	/*originalLength 为字符串str的实际长度*/
	int originalLength = 0;
	int numberOfBlank = 0;
	int i = 0;
	while (str[i] != '\\0')
	{
		++originalLength;
		if (str[i] == ' ')
		{
			++numberOfBlank;
		}
		++i;
	}

	/*newLength 为把空格替换成%20之后的长度*/
	int newLength = originalLength + numberOfBlank * 2;
	if (newLength > length)
	{
		return;
	}
	int indexOfOriginal = originalLength;	//P1
	int indexOfNew = newLength;				//P2
	while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
	{
		if (str[indexOfOriginal] == ' ')
		{
			str[indexOfNew--] = '0';
			str[indexOfNew--] = '2';
			str[indexOfNew--] = '%';
		}
		else
		{
			str[indexOfNew--] = str[indexOfOriginal];
		}
		--indexOfOriginal;
	}
	/*测试代码*/
	for (int i = 0; i < newLength; i++)
	{
		cout << str[i];
	}
}

int main()
{
	char a[] = "aa kanms okaok mnaok maomn lkam km";
	ReplaceBlank(a, 100);
	cout << endl;
	return 0;
}

2.测试

以上是关于《剑指Offer——5:替换空格》代码的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--剑指offer05 替换空格

剑指offer替换空格从尾到头打印链表

剑指offer_替换空格

剑指offer_替换空格

剑指offer_替换空格

剑指offer_替换空格