zoukankan      html  css  js  c++  java
  • 替换空格

    题目:实现一个函数,把字符串中的每个空格替换成%20。例如,输入“We are happy.”,输出”We%20are%20happy.“。要求在原有的字符串中进行替换,不得使用额外的空间,原有字符串空间保证足够大。

    直接从前往后地做替换,会导致一些字符移动多次。转换思路,从后往前做替换,这样每个字符只需要移动一次。

    首先遍历一遍字符串,得出空格的数目,因为空格占一个字符,替换后%20占3个字符,那么每多一个空格,所需空间增加2个字符。例如上面例子,有2个空格,算上字符串结束标志'',共14个字符,替换后变成14+2*2=18个字符。

    #include <stdio.h>
    
    void ReplaceBlank(char string[], int length) {
        if(string == NULL || length <= 0) 
            return;
        
        int originalLength = 0;    //字符数组实际长度 
        int numberOfBlank = 0;    //空格数 
        int i = 0;
        while(string[i] != '') {
            originalLength++;
            if(string[i] == ' ') {
                numberOfBlank++;
            }
            i++;
        }
    
        int newLength = originalLength + 2 * numberOfBlank;    //空格被替换后的长度
        if(newLength > length)
            return;
        
        int indexOfOriginal = originalLength;    //指向原始字符串结尾的指针
        int indexOfNew = newLength;    //指向替换空格后字符串结尾的指针
        
        while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) {
            if(string[indexOfOriginal] == ' ') {
                string[indexOfNew--] = '0';
                string[indexOfNew--] = '2';
                string[indexOfNew--] = '%';
            } else {
                string[indexOfNew--] = string[indexOfOriginal];
            }
            indexOfOriginal--;
        } 
    }
    
    int main() {
        char s[30] = "We are happy.";
        
        ReplaceBlank(s, 30);
        int i = 0;
        while(s[i] != '') {
            printf("%c",s[i]);
            i++;
        }
    
    }
  • 相关阅读:
    第二冲刺阶段第一天
    spring第二冲刺阶段第八天
    spring第二冲刺阶段第七天
    spring第二冲刺阶段第六天
    spring第二冲刺阶段第五天
    spring冲刺第二阶段第四天
    spring第二阶段冲刺第三天
    spring冲刺第二阶段第二天
    SPRING冲刺第二阶段第一天
    spring第一冲刺阶段总结200zi
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5289130.html
Copyright © 2011-2022 走看看