【剑指Offer | C++ 】面试题5:替换空格

该博客介绍了一个C++函数,用于将字符串中的空格替换为'%20'。通过两次遍历,首先计算新字符串长度,然后从后向前复制非空格字符并插入'20%'。示例中给出了对字符串'helloworld'进行替换的操作。时间复杂度为O(n)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:
请实现一个函数,将一个字符串中的空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

解法:
遍历两次
第一次查找空格数得到处理后的字符长度
第二次从后往前如果不是空格复制到末尾,如果是空格替换字符

#include <iostream>
using namespace std;


char* ReplaceBlank(char string[], int length) {
	if (string == nullptr || length < 0) {
		return string;
	}
	int blankNum = 0;
	int stringLen = 0;
	while (string[stringLen] != '\0') {
		if (string[stringLen] == ' ') {
			blankNum++;
		}
		stringLen++;
	}
	int newStringLen = stringLen + blankNum * 2;
	while (stringLen >=0 && stringLen < newStringLen)
	{
		if (string[stringLen] != ' ') {
			string[newStringLen--] = string[stringLen];
		}
		else
		{
			string[newStringLen--] = '0';
			string[newStringLen--] = '2';
			string[newStringLen--] = '%';
		}
		stringLen--;
	}
	return string;
}


int main()
{
    char string[20] = "hello  world";
	int row = 0, col = 4; 
	cout << ReplaceBlank(string, 20);
}

备注:

  • char string[20] = "hello world"; hello world后面全是\0
  • 时间复杂度O(2n)=O(n)
  • 指针类型的可以直接用字符串长度递减来遍历stringLen--;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赛文X

觉得不错就打赏下呗mua~

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

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

打赏作者

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

抵扣说明:

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

余额充值