码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-20 16:49:40      阅读:117      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!