面试题5:替换空格

面试题5:替换空格


题目:实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.”。

解题思路:


  1. 遍历字符串,求出公有多少个字符,和有多少个空格;
  2. 因为要将空格替换成“%20”,意味着一个空格要增加两个长度。
  3. 所以新的字符长度为 原有长度+空格长度*2;
  4. 这是一个指针p1,放在久长度尾部,p2,放在新长度尾部。
  5. 将p1指向的字符移动到p2指向的位置,若字符为空格,则替换成“%20”,此时时间复杂度为O(n);
void ReplaceBlank(char *c){
        if(!c) return;
        int oldLen=0;//久长度
        int blanknum=0;//空格数
        while(c[oldLen]!='\0'){
            if(c[oldLen]==' ') ++blanknum;
            ++oldLen;
        }
        int newLen=oldLen+2*blanknum;//新长度
        int p1=oldLen;//p1指向久尾部
        int p2=newLen;//p2指向新尾部
        while(p1!=p2){
            if(c[p1]!=' ') {//碰到字符,移动
                c[p2]=c[p1];
                --p1;
                --p2;
            }
            else {//碰到空格,替换
                c[p2--]='0';
                c[p2--]='2';
                c[p2--]='%';
                p1--;
            }
        }
    for(int i=0;i<newLen;i++){
        cout<<c[i];
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值