這裡替換空格還會造成字串長度的延長,這是本題的關鍵。如果是在原來的字串上做修改,就有可能覆蓋修改在該字元後面的記憶體,如果是建立新的字串並在新的字串上進行替換,那麼我們可以分配足夠多的記憶體。因而有兩種解決方案,我們應該與面試官溝通一下。這裡我們假設在原來的字串上修改,並且保證輸入的字串後面有足夠多的空餘記憶體。
我們首先考慮從前往後掃瞄,每次遇到空格之後進行替換,但是這樣操作的話每次替換都要移動後面的字元,總的時間效率是o(n2),效率太低;於是我們考慮從後往前掃瞄:
首先準備兩個指標:p1和p2。p1指向原始字串的末尾,p2指向替換之後字串的末尾。接下來我們移動p1,如果p1指向的字元不是空格,我們把它指向的字元複製到p2指向的位置,然後p1和p2都向前移動一位;如果p1指向的字元是空格,我們為您首先把p1向前移動一位,然後在p2之前插入「%20」;直到p1指向字串開頭的位置。
void replaceblank(charstring,int
length)
int newlength = originallength + 2 *numberofcount;
if(newlength >length)
return
;
int indexoforiginal =originallength;
int indexofnew =newlength;
while(indexoforiginal >= 0
)
else
string[indexofnew] = string
[indexoforiginal];
--indexoforiginal;
}}
面試題5 替換空格
面試題5 替換空格 解題思路 遍歷字串,求出公有多少個字元,和有多少個空格 因為要將空格替換成 20 意味著乙個空格要增加兩個長度。所以新的字元長度為 原有長度 空格長度 2 這是乙個指標p1,放在久長度尾部,p2,放在新長度尾部。將p1指向的字元移動到p2指向的位置,若字元為空格,則替換成 20 ...
面試題5 替換空格
方法 一 二 於牛客網 方法 三 四 於leecode 方法一 字串陣列class solution for int j length 1 j 0 j 方法二 字串陣列轉換成string,使用string成員函式 先轉為string,然後處理完成後再轉為const char 指向字串陣列的指標 但不...
面試題5 替換空格
題目 請實現乙個函式,把字串 s 中的每個空格替換成 20 示例 思路1 把字串儲存到陣列中處理,稍微麻煩一點。1 void replacespace char str,int length newlength oldlength 2 count if newlength length 長度超過總長...