剑指Offer - 替换空格

在这里插入图片描述

//思路:
//1.从前往后插入移动的次数多,不建议
//2.从后往前插入更方便

class Solution {
public:
	void replaceSpace(char *str,int length) {
        if(str==nullptr || length<0)return;
        
        int i=0;
        int oldlen=0;//记录原字符串长度
        int blanknum=0;//记录空格数量
        while(str[i]!=0){
            oldlen++;
            if(str[i]==' ')blanknum++;
            i++;
        }
        
        int newlen=oldlen+blanknum*2;//替换空格后的新字符串长度
         if(newlen>length)return;//如果计算后的长度大于总长度就无法插入
         
        int pOldlen=oldlen;//注意不要减一,字符串末尾的结束符null也需计算在内
        int pNewlen=newlen;
       
        while(pOldlen>=0 && pNewlen>=pOldlen){
            if(str[pOldlen]!=' '){
                str[pNewlen--]=str[pOldlen];
            }else{//将空格就替换为"%20"
                str[pNewlen--]='0';
                str[pNewlen--]='2';
                str[pNewlen--]='%';
            }
            pOldlen--;
        }
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值