面試題之替換空格

      題目:實現一個函數,把字符串中的每個空格替換成“%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;
}

其執行結果:

下來我們對內存進行檢測,看是否申請空間的都釋放了:


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