2017-07-18 42 views
0

我想解決CTCI上的Q1.3:編寫一個方法,用'%20'替換字符串中的所有空格。您可能會認爲該字符串在末尾有足夠的空間來容納附加字符,並且您將得到該字符串的「真實」長度。C++ void函數不改變字符串的值

我在main上運行了我的函數,它工作正常,但是當我通過main函數傳遞函數時,我不斷收到原始字符串「Mr. John Smith」而不是「Mr%20John%20Smith」。這是我的代碼。

int main(int argc, const char * argv[]) { 
    string test = "Mr John Smith   "; 
    int length = 13; 
    URLify(test, length); 
    cout << test << endl; 
    return 0; 
} 

void URLify(string a, int length){ 
    string b = a; 
    int counter = 0; 
    for(int i=0;i<length;i++){ 
     if(b[0] != ' '){ 
      a[counter]= b[0]; 
      counter++; 
     } 
     else{ 
      a[counter] = '%'; 
      a[counter+1] = '2'; 
      a[counter+2] = '0'; 
      counter = counter + 3; 
     } 
    } 
} 
+2

將一個**引用**傳遞給字符串,所以你可以改變原來的:'void URLify(string&a,int length)'。 – BoBTFish

回答

1

由於您所傳遞a通過值,因此創建一個副本,並被修改。請將通過參考代替:string& a

1

通過引用並非按價值。應該是:

void URLify(std::string& a, int length)