替换空格【C++实现】

题目描述:

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
给定函数头: 
void replaceSpace(char *str,int length)

题意分析:替换之后的字符串,其有效字符长度大于 原字符串。新字符串仍旧存放在指针str所指向的内存中,该内存的最大长度为 length.
解法:可以先遍历一遍字符串,统计出原字符串的长度oldlen,以及其中空格的个数count;则新字符串的长度newlen=oldlen+count*2;
接下来涉及到新字符串建立时 原字符串元素的复制,注意到新旧字符串共用同一内存空间。
方法一:如果按序号由小到大复制,则每遇到一个空格,其后的所有字符均要向后移动两个位置,为%20留出空间。
方法二:如果按序号由大到小复制,则每遇到一个空格,%20可以直接存放到当前位置,然后继续向前复制。
显然,方法二效率更高,实现也更简单。
本文采用方法二。
下面是代码:
#include<iostream>
using namespace std;
void replaceSpace(char *str, int length) {
	//按照题意,length应该是str所指向内存中可存的最大字符数量。
	int newlen = 1;//新字符串长度,包含结束标志'\0'
	int oldlen = 1;//原字符串长度,包含结束标志'\0'
	int count = 0;//数空格个数
	int i = 0;
	while (str[i] != '\0') {
		if (str[i] == ' ') //如果遇到空格,count加一
			count++;
		oldlen++;//原字符串长度
		i++;
	}
	newlen = oldlen + 2 * count;//新字符串长度
	if (newlen>length)//如果新字符串长度大于限定长度,则退出程序
		exit(1);
	while (oldlen>0) {//从后往前复制
		oldlen--;
		newlen--;
		if (str[oldlen] != ' ') { //非空格字符直接复制
			str[newlen] = str[oldlen];
		}
		else {//空格字符从后往前依次用'0','2','%'替代
			str[newlen--] = '0';
			str[newlen--] = '2';
			str[newlen] = '%';
		}
	}
}
int main()
{
	int length = 20;
	char str[20] = "We are happy";
	replaceSpace(str, length);
	printf("%s\n", str);
	system("pause");
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值