剑指offer 替换字符串中的空格

本文介绍了一种将字符串中的空格替换为'%20'的算法实现。通过两次遍历字符串,首先计算出原始字符串中空格的数量及新字符串长度,然后从后向前逐个替换字符,最终完成空格的替换。此算法适用于Web页面上URL的编码需求。
void replaceSpace(char *str,int length) {
        if(str==NULL||length<=0)
            return;
        int originlen=0;
        int newlen=0;
        int space=0;
        while(str[originlen]!='\0')
        {
            if(str[originlen]==' ')
                space++;
            originlen++;
        }
        originlen++;
        newlen=originlen+2*space;
        if(originlen==1||space==0||newlen>length)
            return;
        char *p1,*p2;
        p1=&str[originlen-1];
        p2=&str[newlen-1];
        for(int i=0;i<newlen;i++)
        {
            if(*p1!=' ')
            {
                *p2=*p1;
                p1--;
                p2--;
            }
            else
            {
                *p2='0';
                p2--;
                *p2='2';
                p2--;
                *p2='%';
                p2--;
                p1--;
            }
            
        }
        return;
    }

把代码整理简化一下:

void replaceSpace(char *str,int length) {
        if(str==NULL||length<=0)
            return;
        int originlen=0;
        int newlen=0;
        int space=0;
        while(str[originlen]!='\0')
        {
            if(str[originlen++]==' ')
                space++;
        }
        originlen++;
        newlen=originlen+2*space;
        if(originlen==1||space==0||newlen>length)
            return;
        int p1=originlen-1;
        int p2=newlen-1;
        for(int i=0;i<newlen;i++)
        {
            if(str[p1]!=' ')
                str[p2--]=str[p1--];
            else
            {
                str[p2--]='0';
                str[p2--]='2';
                str[p2--]='%';
                p1--;
            }
            
        }
        return;
    }

 

转载于:https://www.cnblogs.com/summerkiki/p/5468324.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值