劍指offer 字串空格符替換

2021-10-04 22:34:49 字數 2893 閱讀 9309

/*

實現: 輸入乙個字串,將字串中的空格替換為"%20"輸出。

這裡假設string傳入的字串末尾擁有足夠的容量

例如:輸入:hello world.

輸出:hello%20world.

*/#include #include using namespace std;

// my version

void replacestrblank(char str, int length)

new_length = length + 2 * num_blanks;

char*p_1 = str+length;

char*p_2 = str+new_length;

// cout << num_blanks << " " << new_length << endl;

while(p_1 != p_2)

else

} }else

}void replacestrblank_right(char str, int maxlength)

int new_length = ori_length + 2 * num_blanks;

if(new_length > maxlength)

return;

// cout << ori_length << " " << num_blanks << " " << new_length << endl;

int ori_idx = ori_length;

int new_idx = new_length;

while(ori_idx >=0 && ori_idx < new_idx)

else

--ori_idx; }}

/*qa:

有兩個有序陣列a和b,內存在a中的末尾有足夠的空餘空間容納b,實現

把b中的所有數字插入a中並且所有的數字都是有序的。

solution:

依次從兩個陣列尾部取出乙個數,如果a陣列的大則放入新的a的尾部,否則放入b的;然後分別

依次從後往前移動指標;

*/void mergearrsinsorte(int arr_a, int arr_b, int a_length, int b_length, int maxsize)

else

} while(b_i >= 0)

}void test_1()

void test_2()

void test_3()

void test_4()

void test_5()

void test_6()

void test_7()

void test_8()

void test_9()

void test_10()

void test_merge_1()

; int b = ;

for(auto e:a)

cout << e << " ";

cout << endl;

for(auto e:b)

cout << e << " ";

cout << endl;

mergearrsinsorte(a, b, 5, 5, 50);

for(auto e:a)

cout << e << " ";

cout << endl;

}void test_merge_2()

; int b = ;

for(auto e:a)

cout << e << " ";

cout << endl;

for(auto e:b)

cout << e << " ";

cout << endl;

mergearrsinsorte(a, b, 5, 5, 7);

for(auto e:a)

cout << e << " ";

cout << endl;

}void test_merge_3()

; int b = ;

for(auto e:a)

cout << e << " ";

cout << endl;

for(auto e:b)

cout << e << " ";

cout << endl;

mergearrsinsorte(a, b, 5, 5, 10);

for(auto e:a)

cout << e << " ";

cout << endl;

}void test_merge_4()

; int b = ;

for(auto e:a)

cout << e << " ";

cout << endl;

for(auto e:b)

cout << e << " ";

cout << endl;

mergearrsinsorte(a, b, 5, 5, 50);

for(auto e:a)

cout << e << " ";

cout << endl;

}void test_merge_5()

; int b = ;

for(auto e:a)

cout << e << " ";

cout << endl;

for(auto e:b)

cout << e << " ";

cout << endl;

mergearrsinsorte(a, b, 5, 5, 50);

for(auto e:a)

cout << e << " ";

cout << endl;

}int main(int argc, char**ar**)

劍指offer 字串替換空格

見到這個題目,我們很容易想到 申請一塊新空間,儲存變化後的字串,顯然不是我們想要的結果 由此,我們可以想到如下方法 1 先遍歷一次字串,統計出字串中空格的總數,並可以由此計算出替換之後字串總長度。每替換乙個空格,長度增加2,因此替換以後字串的長度等於原來的長度加上2乘以空格數目。2 然後從後往前開始...

劍指Offer 替換字串中空格

另外一種較好的解法是從後往前替換,具體做法是從頭遍歷計算所有空格數,計算出總的長度。該解法的前提條件是若在源字串上替換就要求源字串有足夠的空間來容納新的字串。時間複雜度為o n 解決辦法一 利用replace函式 將str轉為字串後呼叫replace方法,將空格轉為 20 即可。需要注意的是repl...

劍指Offer04 字串空格替換

由於陣列在定義時必須指定其長度,因此必須先統計有多少個空格,然後計算新陣列的長度為 length 2 空格數 因為 20佔三個位置,而原來的空格佔乙個位置。然後從頭或者從尾遍歷依次將原字串中字元複製到新的數字中,遇到 時新陣列依次複製三個字元 2 0 public class code004 pri...