1. 程式人生 > >劍指offer之替換空格

劍指offer之替換空格

1.題目描述

請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

2.問題分析

修改字串的幾個注意點:

  1. 如果字串是記憶體中的常量區,我們使不允許修改的;
  2. 修改字串我們要主要字串的長度問題,不要越界;
  3. 字串後面有一個’\0’識別符號,我們需要複製。

程式的分析在程式碼註釋裡面,看原始碼

3.程式碼

void replaceSpace(char *str,int length) {
    if(str == NULL)
        return;
    //字串長度
    int len = 0;
//空格長度 int countSpace = 0; //指向字串首地址 char* p = str; while(*p != '\0') { //統計字串中空格長度 if(*p == ' ') ++countSpace; //地址後移 ++p; //統計字串長度 ++len; } //新字串長度 int realLen = len + 2 * countSpace; //重新指向字串首地址 p = str; //從後向前替換字串,注意我們需要把原字串中的'\0'也拷貝到新的字串中,所以從地址p + len開始
for(int i = len; i >= 0; --i) { if(*(p + i) != ' ') *(p + realLen--) = *(p + i); else { *(p + realLen--) = '0'; *(p + realLen--) = '2'; *(p + realLen--) = '%'; } } }