牛客网刷题--剑指offer(替换空格)

题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
做法是先做统计,看有多少个空格,之后算出若将一个空格字符换成三个字符,字符串总长度为多少。
假设有n个空格,那新的字符串长度为 老字符串长度 + 2 * n。
算出来之后,定义两个指针,一个指向老字符串末尾,一个指向新字符串末尾,然后就是将老字符串移到新字符串位置,若遇到空格,则新字符串要依次填入字符‘0’,字符‘2’,字符‘%’。当指向老字符串的指针坐标小于零时,循环结束,替换完成。
代码粘贴如下,以备以后再看

//length为牛客系统规定字符串输出的最大长度,固定为一个常数
class Solution {
public:
    void replaceSpace(char *str,int length) {
        // first check argument
        if (str == NULL || length < 0)
            return;
        int blank_num = 0;
        int str_length = 0;
        for (int i = 0; str[i] != '\0'; ++i) {
            str_length ++;
            if (str[i] == ' ')
                blank_num ++;
        }
        int real_length = str_length + blank_num * 2;

        for (int i = str_length + 1, j = real_length + 1; i >=0;) {
            if (str[i] != ' ') {
                str[j] = str[i];
                i--;
                j--;
            } 
            else {
                i --;
                str[j--] = '0';
                str[j--] = '2';
                str[j--] = '%';
            }
        }

    }
};

若有不对之处,敬请指正

你可能感兴趣的:(面试前编程整理,牛客网,剑指offer,替换空格)