第四题 替换空格

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

可以使用这样的方法:
先遍历一遍字符串,求出字符串中空格的个数,由此,可以计算出替换之后的字符串的总长度,然后标记出字符串的末尾p1和替换之后的末尾p2。

再逐步往前移动p1,p2,同时将p1数据复制到p2的位置中,如果p1指向了一个空格,则将p1往前移动一格,p2的位置依次插入’0’ ‘2’ ‘%’并往前移动。

当空格替换完,p1与p2会到达同一位置。此算法时间复杂度o(n)。

void ReplaceBlack(char *string,int len)
{
    if(string == NULL||len < 1) 
    {
        return;
    }
    int count = 0;
    int strlength = 0;
    for(int i=0;string[i] != '\0';++i)
    {
        ++ strlength;
        if(string[i] == ' ')
        {
            ++ count;
        }
    }
    int newlength = strlength + count * 2;
    if(len < newlength)
    {
        return;
    }
    int indexoriginal = strlength + 1;
    int indexnewlen = newlength + 1;

    //不要在语句内比较时执行 indexoriginal-- 操作
    while(indexoriginal >= 0 && indexoriginal < indexnewlen)
    {
        if(string[indexoriginal] == ' ')
        {
            string[indexnewlen--] = '0';
            string[indexnewlen--] = '2';
            string[indexnewlen--] = '%';
        }
        else
        {
            string[indexnewlen--] = string[indexoriginal];
        }
        indexoriginal --;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值