面试题之替换空格

来源:互联网 发布:北京建筑大学网络 编辑:程序博客网 时间:2024/06/05 05:53

      题目:实现一个函数,把字符串中的每个空格替换成“%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 100char* 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;}

其执行结果:

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


0 0
原创粉丝点击