題目描述
請實作一個函數,将一個字元串中的空格替換成“%20”。
例如,當字元串為We Are Happy.則經過替換之後的字元串為 We%20Are%20Happy。
在網絡程式設計中,如果一個URL參數含有特殊字元,如空格,#等,可能導緻服務端無法獲得準确的參數值。我們需要将這些特殊字元轉換成服務端可以識别的字元,轉換的規則是在'%'後面跟上ASCII碼的兩位十六進制表示。比如空格的ASCII碼是32,也就是十六進制的0x20,是以空格被替換為了%20 。再比如#的ASCII碼為35,即0x23,是以他在URL中應替換為%23 。(URL相關的可以參考我Java爬蟲的那幾篇)
将一個空格替換為三個字元 。
如果按順序周遊字元串,在保證字元串有足夠的空間下,需要對後邊的字元串進行大量的移動。
較為簡單的方法是,周遊一邊字元串,記錄空格數,假如為字元串原長度為10,空格數為3 , 那麼替換後字元串的長度應該為 10+2*3 。
然後倒序操作字元串,遇到非空格的字元串,則填到擴充位,然後擴充位減一,遇到空格,則在擴充位位置填入'0' ,'2' ,'%' ,每次擴充位各加一 。
1 #include<bits/stdc++.h>
2
3 using namespace std ;
4
5 int main()
6 {
7 char c[] = "We are Happy" ;
8 int len = 13 ;
9 int num = 0 ; // 空格數
10 for(int i=0;i<len;i++){
11 if(c[i]==0x20){
12 num ++ ;
13 }
14 }
15
16 int newLen = len + 2 * num ; // 替換後字元串應該的長度
17 char *a = new char[newLen];
18 for(int i=len-1;i>=0;i--){
19 if(c[i]!=0x20){
20 a[newLen--] = c[i] ;
21 }else {
22 a[newLen--] = '0';
23 a[newLen--] = '2';
24 a[newLen--] = '%';
25 }
26 }
27 cout << a <<endl ;
28 return 0 ;
29 }