題目分析:
首先,我們應該想到的是原來是乙個空格字元,替換之後變為三個字元 『%』 ,『2』 ,『0』;
如果我們直接在原來的字串上進行替換,就有可能覆蓋掉原本的內容;如果是建立新的字串並
新的字串上做替換,那麼我們可以自己分配好足夠的記憶體,所以我們應該向面試官問清楚如果面
試官告訴你在原本的字串上做修改,並且記憶體足夠,那麼你就可以放手來做了。
演算法選擇:
如果我們選擇正面替換,則遇到乙個空格字元,就需要替換三個字元,那麼空格後面的
所以內容就都要向後挪動三個字元的長度,你會發現,會有不少內容被重複移動,可以自己在本子上
畫一畫就清楚了,我在這裡不做**! 那麼你就要考慮一下這種方法是否最簡了,如果實在想不到,
就把這種方法寫上吧,我在這裡提供倒序替換,就是反著替換的方法,通過改變字元陣列的方法實現;
**如下:
#include#include#include#include#define max 50
void replaceblank(char arr)
*/ while(arr[i]!='\0')
newlength = length + 2*num;//newlength 是把空格替換成%20之後的長度
if(newlength > max)//新陣列都不能大於原陣列最大長度
return ;
/* 迴圈結束條件這裡需要自己畫圖理解一下;
因為是從後往前遍歷,所以length肯定》=0;
而新開闢的newlength 始終大於length,直到相遇;
*/ while(length >= 0 && newlength > length)
else
--length; }}
int main()
這道題我講的比較粗糙,主要是沒有畫圖理解,這個希望大家自己在底下按照我說的進行畫圖幫助理解!
謝謝!
劍指offer面試題 替換空格
題目 請實現乙個函式,把字串中的每個空格替換成 20 例如輸入 則輸出 解析 時間複雜度為o n 的解法。完整 及測試用例實現 cpp view plain copy include using namespace std include length 為字元陣列string的總容量 void re...
替換空格(劍指offer面試題4)
分析 從頭到尾掃瞄字串,遇到空格就替換,導致後面的字元都要向後移,意味著總時間複雜度為o n 2 更好的辦法,從字串後面遍歷替換。先遍歷所有的空格,每多乙個空格,字串長度加2個,也就是說最後替換後的字串長度為原長度 2 空格數,設定兩個指標,指向原始字串末尾和新字串末尾,依次向前遍歷,原始字串指標遇...
劍指Offer 面試題四 替換空格
c c 把常量字串放到單獨的乙個記憶體區域。當幾個 指標賦值給相同的常量字串時,它們實際上會指向相同的記憶體位址。但是用常量記憶體初始化陣列,情況卻不相同。如下 includeusing namespace std int main 執行結果 same no same 請按任意鍵繼續.分析 ch1和...