首页 > 编程语言 > 详细

4. 替换空格(字符数组)

时间:2015-08-20 16:48:26      阅读:156      评论:0      收藏:0      [点我收藏+]

题目描述

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

解析

直观的想法是,新建一个数组,逐个复制,遇到空格时,写入%20,但这需要占用额外空间。
如果我们顺序的遍历字符串,当遇到空格时,用%20替换空格,这将覆盖掉空格后面的字符
如果覆盖前,后移剩余字符串,那么移动的时间复杂度为O(n^2).

采用从后往前复制字符的方法。首先统计空格的个数,计算出新字符串的长度,然后用2个指针,1个指向新字符串尾,1个指向旧字符串尾,两指针同步向前,旧指针遇到空格时,新索引指针按地址写入%20,当新旧指针相等时说明已经替换完全部空格。

实现

void ReplaceBlank(char string[], int length){
    //判断传参是否有效
    if(string==NULL || length<=0)
        return;
    //计算字符串的长度,计算空格个数
    int oldLength = 0;
    int numberOfBlank = 0;
    for(int i=0; string[i]!=‘\0‘; i++){
        oldLength++;        //字符长度不包括字符串结束符
        if(string[i] == ‘ ‘)
            numberOfBlank++;
    }
    //判断原有字符数组是否能容纳新的字符串
    int newLength = oldLength + numberOfBlank * 2;
    if(newLength >= length)
        return;
    //替换空字符
    int indexOld = oldLength;
    int indexNew = newLength;
    while(indexOld != indexNew){
        if(string[indexOld] == ‘ ‘){
            string[indexNew--] = ‘0‘;
            string[indexNew--] = ‘2‘;
            string[indexNew--] = ‘%‘;
            indexOld--;
        }else{
            string[indexNew--] = string[indexOld--];
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

4. 替换空格(字符数组)

原文:http://blog.csdn.net/yiting52/article/details/47336199

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!