面試題3 替換空格和清除空格

2021-06-15 11:46:06 字數 2511 閱讀 1239

一、替換空格

分析:在空間複雜度盡可能低的情況下,不允許開闢乙個新的陣列來存放替換空格後的字串。如果

從前往後替換字串,那麼儲存在空格後面的字串肯定會被覆蓋。假設字串的長度為n。對每個空格字元,需要移動後面o(n)個字元,因此對含有o(n)個空格字元的字串而言總的

時間複雜度是o(n^2),明顯不可取。

思路:我們考慮從後往前進行替換,時間複雜度降為o(n)

(1)首先遍歷一遍字串,找出字串的長度以及其中的空格數

(2)根據原字串的長度和空格數求出最後新的字串的長度

(3)設定兩個指標分別指向原字串和新字串的末尾位置

(4)如果原字串的指標指向的內容不空,則將內容賦值給新指標指向的位置;否則從新指標開始向前賦值「02%」

(5)直到兩個指標相等時表明字串中的所有空格已經替換完畢

c++**:

#include "stdafx.h"

#include using namespace std;

//將字串str中的空格替換為"%20"

void replaceblank(char *str)

++p;

}int nnewlength = noldlength + ncountofblank * 2;//新字串的長度

int noldindex = noldlength - 1;

int nnewindex = nnewlength - 1;

while(noldindex != nnewindex)

else

--noldindex;

}

}int _tmain(int argc, _tchar* argv)

二、清除空格

分析:較為簡單,直接從頭到尾

進行清除。

(1)設定兩個指標p1和p2初始狀態都指向字串的首字元

(2)若p2指向的元素不空,則將p2指向的內容賦給p1,然後都指向下乙個元素;否則為空格,則p2指向下一元素。

(3)直到p2指向字串末尾「\0」時清除空格結束。

c++**:

#include "stdafx.h"

#include using namespace std;

//清除字串str中的空格,從前往後遍歷

void deleteblank(char *str)

char *p1 = str;

char *p2 = str;

while (*p1 != '\0')//注意此處應該是p1,不是p2,因為'\0'仍然需要賦給p1

else

} }int _tmain(int argc, _tchar* argv)

三、清除多餘空格

分析:同樣是從前往後

遍歷,但需要定義乙個bool變數標記是否儲存乙個空格。初始化時被設定為fasle,這樣開始階段的空格都不會被儲存,當碰到乙個非空格字元時,儲存該字元,然後將標記設定為true,表示會儲存字串中的第乙個空格。經過上述幾步操作,可以保證字串結尾要麼是空字元,要麼是非空格字元。如果是空格字元,則將其設定為"\0",如果不為空格字元,則在其後面加上"\0"。

c++**:

#include "stdafx.h"

#include using namespace std;

//清除字串str中多餘的空格,從前往後遍歷

void deleteredundantblank(char *str)

char *p1 = str;

char *p2 = str;

bool keepblank = false;//記錄空格是否儲存

while (*p1 != '\0')//注意此處應該是p1,不是p2,因為'\0'仍然需要賦給p1

else

else

} } int nlen = strlen(str);

if (str[nlen - 1] == ' ')

nlen = strlen(str);

}int _tmain(int argc, _tchar* argv)

面試題4 替換空格和清除空格

將長度為1的空格替換為長度為3的 20 字元差的產度變長。如果允許我們開闢乙個新的陣列來存放替換空格後的字串,那麼這道題目就非常簡單。設定兩個指標分別指向新舊字串首元素,遍歷原字串,如果碰到空格就在新字串上填入 20 否則就複製元字串上的內容。但是如果面試官要求在原先的字串上操作,並且保證原字串有足...

面試題 替換空格

基本思路 先遍歷一遍字串統計字串中空格的個數並計算出替換之後的字串的總長度,每替換乙個空格,長度增加2,因此替換後字串的長度對於原來的長度加上空格個數的2倍。如果從頭到尾掃瞄字串,遇到空格就做替換,必須每次都把空格後面所有的字元都向後移動兩個位元組,這樣處理的時間複雜度為o n 效率比較低。我們還有...

面試題 替換空格

一 2 在網路程式設計中,如果url引數中含有特殊字元,如空格 等,則可能導致伺服器端無法獲取正確的引數值。我們可以將這些特殊符號替換成伺服器可以識別的字元。可以在 後面跟上ascii碼的兩位十六進製制表示。空格的ascii碼為32.3 思路 1 把第乙個指標指向字串的末尾,把第二個指標指向替換後字...