面试题6:替换空格

1.描述

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

2.思路

时间复杂度O(n),在原串上面进行修改即可
空格->%20,长度多2,统计空格个数,之后利用指针的思想从尾遍历原字符串进行“假复制”操作,实质是改变指针的指向即可

3.code

#include <iostream>
#include <string>
#include <string.h>
#include <vector>
using namespace std;

// 
// 
void replaceSpace(char str[]){
    int len = strlen(str);
    cout << "len: " << len << endl;
    if(str == NULL || len <= 0) return;

    int count = 0;
    for(int i = 0; i < len; ++i){
        if(str[i] == ' ') 
            count++;
    }

    int newlen = len + 2*count;
    // cout << newlen << endl;

    while (len < newlen){  
        if(str[len] == ' '){
            str[newlen--] = '0';
            str[newlen--] = '2';
            str[newlen--] = '%';
            len--;
        }    
        else{
            str[newlen--] = str[len--];
        }
    }
}

int main()
{
    char str[] = "We Are Happy.";
    cout << "Init: " << str << endl;
    replaceSpace(str);
    cout << "Change: " << str << endl;
    return 0;
}

4.结果截图

图片说明