見到這個題目,我們很容易想到:
//申請一塊新空間,儲存變化後的字串,顯然不是我們想要的結果
由此,我們可以想到如下方法:
(1)先遍歷一次字串,統計出字串中空格的總數,並可以由此計算出替換之後字串總長度。每替換乙個空格,長度增加2,因此替換以後字串的長度等於原來的長度加上2乘以空格數目。(2)然後從後往前開始複製替換。首先準備兩個指標,p1和p2,p1指向原始字串的末尾,p2指向那個替換後字串的末尾,接下來向前移動指標p1,逐個複製它指向的字元到p2所指的位置,遇到空格的話,p1向前移動乙個,p2插入「%20」,p2向前移動三個。(3)遇到下乙個空格,重複上述過程,等到p1與p2指向同一位置時,表明替換完成。
**實現如下:
#include
using
namespace
std;
void replaceblank(char
string, int length)
int originlength = 0; //字串實際長度
int numberofblank = 0;
int index = 0;
while(string[index])
++index;
}int newlength = originlength + numberofblank*2; //替換後字串長度
if(newlength > length)
int indexoforigin = originlength;
int indexofnew = newlength;
while(indexoforigin >= 0 && indexofnew > indexoforigin)
else
--indexoforigin;
}}void funtest()
cout
劍指Offer 替換字串中空格
另外一種較好的解法是從後往前替換,具體做法是從頭遍歷計算所有空格數,計算出總的長度。該解法的前提條件是若在源字串上替換就要求源字串有足夠的空間來容納新的字串。時間複雜度為o n 解決辦法一 利用replace函式 將str轉為字串後呼叫replace方法,將空格轉為 20 即可。需要注意的是repl...
劍指offer 字串空格符替換
實現 輸入乙個字串,將字串中的空格替換為 20 輸出。這裡假設string傳入的字串末尾擁有足夠的容量 例如 輸入 hello world.輸出 hello 20world.include include using namespace std my version void replacestrb...
劍指offer 替換字串
思路 如果直接替換,就有可能覆蓋修改在字串後面的記憶體。如果建立新的字串並在新的字串上做替換,我們就可以分配足夠多的記憶體。對於任何乙個函式,我們要做哪些基本的檢測 1.傳入的引數有效性 2.函式體邊界的判斷 3.返回值正確返回 void replaceblank char str,int leng...