面试题之替换空格

      题目:实现一个函数,把字符串中的每个空格替换成“%20”.例如输入"We are happy",则输出“We%20are%20happy”。

    对于这道题来说,大多数人都会从前向后遍历字符串,遇到空格时,将后面的字符串后移,这样一来,时间复杂度瞬间到了o(n^2),如果我们首先遍历字符串判断出字符串内由几个空格,然后从后向前遍历,一次放到位。这样一来,时间复杂度瞬间降为o(n).

    下面给出代码:

#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define N 100

char* replace_blank(const char* &str)
{
    int len = strlen(str);
    int cnt = 0;
    char *string = (char *)str;
    if(str == NULL || len <= 0){
        return NULL;
    }
    while(*string){
        if(*string == ' '){
            cnt++;
        }
        string++;
    }
    int len2 = len + 2 * cnt + 1;
    char * string1 = new char[len2];
    strcpy(string1,str);
    len = len + 1;
    while(len >= 0){
        if(string1[len] == ' '){
            string1[len2--] = '0';
            string1[len2--] = '2';
            string1[len2--] = '%';
        }else{
            string1[len2--] = string1[len];
        }
        len--;
    }
    return string1;
}
int main(int argc,char**argv)
{
    string str;
    int i = 0;
    const char * str1;
    char *str2;
    int len;
    int k ;
    cout << "please input string:"<<endl;
    getline(cin,str);
    str1 = str.c_str();
    cout << str << endl;
    len = strlen(str1);
    str2 = replace_blank(str1);
    for(i = 0;i < strlen(str2);++i){
        cout << str2[i];
    }
    cout << endl;
    delete str2;
    return 0;
}

其执行结果:

下来我们对内存进行检测,看是否申请空间的都释放了:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章