替换字符串中的空格

题目:

将字符串中的空格替换为“20%”

注:把需要替换的字符改为%xx,xx为要进行替换的字符的ASCII码的16进制表示。 替换字符串中的空格(空格的ASCII值为32,用16进制表示为20,所以将空格替换为%20) 

思路:

第一步先遍历字符串,计算出替换空格之后的大小(由于一个字符被替换为了三个字符,所以替换后字符串的长度=空格的数量*2+替换之前字符串的长度)。定义两个指original_length和new_length, original_length指针指向原字符串的尾部,new_length指向替换后的尾部。

original_length开始从右向左移动替换字符时都从尾部开始遍历

若没遇到空格,就将所指的字符复制到new_length所指的位置,然后new_length也向左移动一个字符;若遇到了空格,new_length分别赋值‘0’,‘2’,‘%’(每赋值完一个就左移一个)。

时间复杂度为 O(N)。

代码如下:

#include <iostream>
#include <cassert> 
using namespace std;
void ReplaceBlank(char S[]){
	assert(S!=NULL);		//断言函数判断字符串不为空 
	int original_length=0;
	int num_blank=0;
	int i=0;
	while(S[i]!='\0'){		//如果字符不为空,长度加一 
		original_length++;
		if(S[i]==' '){
			num_blank++;	//如果字符为空格,空格数加一 
		}
		i++;
	}
	int new_length=original_length+num_blank*2;		//新字符串长度为原字符串长度加上空格数乘2 
	while(original_length>0&&new_length>original_length){
		if(S[original_length]==' '){ //从后往前遍历 
			S[new_length]='0';		//替换之后指针需要向前移动一个 
			new_length--;			//这里是先替换后移动,也可写成S[new_length--]='0'; 
			S[new_length]='2';
			new_length--;
			S[new_length]='%';
			new_length--;
		}
		else{
			S[new_length]=S[original_length];
			new_length--; 
			}
		original_length--;		//原字符串指针左移一个 
	}

}
int main(){
char S[30]="I like NEU ";
ReplaceBlank(S);
cout<<S;
return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值