2.替换空格

本文介绍了一种将字符串中的空格替换为“%20”的算法实现,详细讲解了算法的主要思路与步骤,并提供了C++代码示例。适用于网页URL编码场景。

题目

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
注意:void replaceSpace(char *str, int length),输入是一个数组,length是该数组的长度。字符串在数组中在结尾处保存‘\0’。

主要思路

  • 计算字符串的长度结尾索引size(包含’\0’),同时计算其中空格的数量space。
  • 计算空格替换成“%20”后字符串的结尾索引end = size + 2 * space
  • 从原字符串结尾size(\0)处向前遍历。遇到字符,将size出的字符复制到end处。同时size和end自减。
  • 遇到空格,end处添加"%20"三个字符,同时end自减3次,size自减。
  • 重复上述两步知道遍历完数组(优化,当size和end相等的时候,说明前面已经没有空格了,此时不用复制了,直接从循环中break)

代码

class Solution {
public:
	void replaceSpace(char *str, int length) {
        if ( str == nullptr || length == 0 ) return;
        
        // 计算空格数
        int space = 0;
        int size = 0;
        while ( str[size] != '\0' ) {
            if ( str[size] == ' ' ) ++space;
            ++size;
        }
        
        // 计算新数组的终止index
        int end = size + 2 * space;
        
        // 从后向前遍历
        for ( int i = size; i >= 0; --i ) {
            if ( i == end ) break;
            
            if ( str[i] == ' ') {
                str[end--] = '0';
                str[end--] = '2';
                str[end--] = '%';
            }
            else {
                str[end--] = str[i];
            }
        }
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值