劍指offer 4 替換空格

2021-07-02 07:04:47 字數 1218 閱讀 5847

1.c/c++ 中每個字串都以字元『\0』 作為結尾。

string s="a";

coutcoutcout2.當幾個指標賦給相同的常量字串時,它們實際上會指向相同的記憶體位址。但用常量記憶體初始化陣列,情況卻有所不同。

char * c1 = "a";

char  *c2 = "a";

char c3 = "a";

char c4 = "a";

cout<< (c1==c2);    //  true

cout<<  (c3==c4);   //  false

3.c#  string 是class 是引用型別。

題目:

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

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

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

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

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

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

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

#include
using namespace std;

void replaceblan( char string , int length)

i++;

}int newlen = originallen+blankcount*2;

if (newlen>length) //判斷

return;

int indexori = originallen;

int indexnew = newlen;

while (indexori >=0 && indexnew>indexori)

else

--indexori;

}cout<

劍指offer(4)替換空格

看到替換,我們首先應該想到的是原來乙個空格字元,替換之後變成 2 和 0 這3個字元,因此字串會變長。首先我們要向面試官詢問是新建字串還是在原有字串上面修改,本體要求是在原有字串上進行修改。思路1 如果從前到後遍歷,遇到空格,就替換 空格後面字元需要自後向前向後移動兩個空格 那麼時間複雜度是o n2...

劍指offer 4 替換空格

該問題如果採用暴力方法 從前往後遍歷,如果遇到空格,開始整體資料向後移動2位,插入 20,一直到結束。採用這樣的方法,時間複雜度為o n 2 o n 2 o n2 比較耗時間,也不是理想的方案。上面的方案,可以看出有很大的改進空間,如果知道了空格的個數,直接從後往前遍歷,這樣每個元素都能放到最終位置...

劍指offer 替換空格

思路 首先遍歷字串,找出空格的數量countspace,計算變換後的總長為newlength str.length 2 countspace。定義心得字元陣列,長度為newlength 從字串的後面開始複製和替換,如果不是空格,就複製,如果是空格,就變為 20.難點 牛客網上傳入引數是stringb...