【编程-剑指offer】替换空格

1、替换空格

题目描述

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

知识点

字符串

解题思路

将长度为1的空格替换成长度为3的“%20”。
1、如果允许用新数组来存放替换空格后的字符串,则可直接进行遍历
用两个指针分别指向两个字符串,若原字符串不为空格则复制,若原字符串为空格则替换成“%20”。
2、如果必须在原字符串上操作,则可以考虑从后往前替换字符串
1)计算空格数
首先遍历得到原字符串中空格的数目,已知原字符串的长度,则可根据此计算出新字符串的长度。
2)替换空格
根据计算出的新旧字符串长度,使用两个指针指向新旧字符串的末尾,从后向前遍历。若原字符串不为空格则复制,若原字符串为空格则倒着替换成“02%”。

代码块

class Solution {
public:
    void replaceSpace(char *str,int length) {
        int oldlen=0,newlen=0;
        //1、计算空格数
        for(oldlen=0; str[oldlen]!= '\0'; oldlen++){
            if( str[oldlen] == ' ' ){
                newlen++;
            }
        }
        //2、替换空格
        newlen = oldlen + newlen*2;
        str[newlen]='\0';     //很重要,一定要加上这一步
        int i=0,j=0;
        i=oldlen-1;
        j=newlen-1;
        while(i>=0 && j>=0){
            if( str[i] == ' ' ){
                str[j--]='0';
                str[j--]='2';
                str[j--]='%';
                i--;
            }else{
                str[j--]=str[i--];
            }//i--;   //不管是if还是else都要把point1前移,为了下一次的执行
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值