2017-07-18 17 views
0

CTCIでQ1.3を解決しようとしています:文字列内のすべてのスペースを '%20'に置き換える方法を書いてください。追加の文字を保持するために文字列の最後に十分なスペースがあり、文字列の「真の」長さが与えられていると仮定できます。C++ void関数が文字列の値を変更しない

mainで関数を実行しても機能しますが、mainで関数を渡すと "Mr%20John%20Smith"の代わりに元の文字列 "Mr. John Smith"が得られます。ここに私のコードです。

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) 
関連する問題