面試題:替換空格
阿新 • • 發佈:2019-02-12
一、
1、題目:請實現一個函式,把字串中的每個空格替換成“%20”。例如:輸入“We wre happy”,則輸出"We%20are%20happy"。
2、在網路程式設計中,如果URL引數中含有特殊字元,如空格、‘#’等,則可能導致伺服器端無法獲取正確的引數值。我們可以將這些特殊符號替換成伺服器可以識別的字元。可以在‘%’後面跟上ASCII碼的兩位十六進位制表示。空格的ASCII碼為32.
3、思路:
(1)把第一個指標指向字串的末尾,把第二個指標指向替換後字串的末尾
(2)依次複製字串的內容,直至第一個指標碰到第一個空格
(3)把第一個空格替換成“%20”,把第一個指標向前移動1格,把第二個指標向前移動3格
(4)依次向前複製字串中的字元,直至碰到空格
(5)替換字串中的倒數第二個空格,把第一個指標向前移動1格,把第二個指標向前移動3格
4、程式實現:
# include<stdio.h> # include<stdlib.h> # include<assert.h> void IsReplaceSpace(char *arr, int len) { if (NULL == arr || len <= 0) return; //計算出原始字串的長度和空格的個數 int OriArrCount = 0;//原始字串的長度 int NewArr = 0;//新串的長度 int SpaceCount = 0;//空格的個數 int i = 0; while (arr[i] != '\0') { ++OriArrCount; if (arr[i] = ' ') ++SpaceCount; ++i; } //替換後,新串的長度 NewArr = OriArrCount + 2 * SpaceCount; if (NewArr > len) return; int IndexOriArrCount = OriArrCount; int IndexNewArr = NewArr; while (IndexOriArrCount > 0 && IndexNewArr > IndexOriArrCount) { if (arr[IndexOriArrCount] == ' ') { arr[IndexNewArr--] = '0'; arr[IndexNewArr--] = '2'; arr[IndexNewArr--] = '%'; } else arr[IndexNewArr--] = arr[IndexOriArrCount]; --IndexOriArrCount; } } int main() { char arr[] = "We wre happy"; int len = strlen(arr); IsReplaceSpace(arr, len); printf("%s\n" ); system("pause"); return 0; }
測試結果:
產生這種錯誤的原因是: