劍指offer面試題4 替換空格 20和清除空格

2022-05-03 07:18:10 字數 1285 閱讀 7753

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

如果從前往後替換字串,那麼儲存在空格後面的字串肯定會被覆蓋,那麼我們就考慮從後往前進行替換。

首先遍歷原字串,找出字串的長度以及其中的空格數量,

根據原字串的長度和空格的數量我們可以求出最後新字串的長度。

設定兩個指標point1和point2分別指向原字串和新字串的末尾位置。

如果point1指向內容不為空格,那麼將內容賦值給point2指向的位置,如果point1指向為空格,那麼從point2開始賦值「02%」

直到point1==point2時表明字串中的所有空格都已經替換完畢。

#include#includeusing namespace std;

//length為字串總容量

void replacespace(char string, int length)

} int k = i + 2 * blanknumber;

if (k > length)

return;

string[k]='\0';//此行必不可少

int point1 = i - 1, point2 = k-1;

for (; point1 >= 0 && point2 > point1; point1--) else

string[point2--] = string[point1]; }}

int main()

return 0;

}

2.清除空格

這道題目是需要清楚空格,那麼清除空格後所得到的字串要比原先的字串要短,這是我們從頭到尾進行清楚空格的話就不會覆蓋到空格後面的字元,所以我們可以從頭開始清除。

設定兩個指標p1和p2初始狀態都指向字串首字元。

如果p2指向的元素不為空格,那麼將p2指向的內容賦值給p1,然後p1和p2指向下乙個元素;如果p2指向的內容為空格,那麼p2指向下乙個元素。

直到p2指向字串末尾的'\0'時清除空格結束。

#include#includeusing namespace std;

void replaceblank(char *s)

}void main()

替換空格(劍指offer面試題4)

分析 從頭到尾掃瞄字串,遇到空格就替換,導致後面的字元都要向後移,意味著總時間複雜度為o n 2 更好的辦法,從字串後面遍歷替換。先遍歷所有的空格,每多乙個空格,字串長度加2個,也就是說最後替換後的字串長度為原長度 2 空格數,設定兩個指標,指向原始字串末尾和新字串末尾,依次向前遍歷,原始字串指標遇...

劍指offer 面試題4 替換空格

題目由來 在網路程式設計中,如果url引數中含有特殊字元,如空格 等,可能導致伺服器端無法獲得正常的引數值。我們需要將這些特殊符號轉換成伺服器可以識別的字元。轉換的規則是在 後面跟上ascii碼的兩位十六進製制的表示。比如空格的ascii碼是32,即十六進製制的0x20,因此空格被替代成 20 思路...

劍指offer 面試題4 替換空格

由於我在實現的時候使用的是c 的string,所以從後往前複製和從前往後複製,時間複雜度是一樣的。如果使用char 陣列實現,則從後往前複製更高效。重點是掌握這種反向思維。class solution 初始化新string string res s.size 2 countblank,a 必須將si...