2014-12-02 15 views
1

我有這樣的C++代碼(我將在下面解釋):將字符轉換爲大寫不工作

#include <iostream> 
#include <string> 
#include <vector> 
#include <cctype> 

using namespace std; 
int main() 
{ 
    // part 1 
    cout << "Write many words separated by either newlines or spaces:"<< endl; 
    string word; 
    vector<string> v; 
    while(cin >> word){ 
     if(word == "quit"){ 
      break; 
     } 
     else{ 
     v.push_back(word); 
     } 
    } 
    //part 2 
    for(string x:v){ 
     for(char &j:x){ 
      j = toupper(j); 
     } 
    } 
    //part 3 
    for(string x:v){ 
     cout << x << endl; 
    } 

    return 0; 
} 

我所試圖做的就是串序列,並轉換每個字符的字符串以大寫字母輸出並返回字符串。 我想在學習時使用矢量。 在第1部分,我從標準輸入字符串,並將其存儲在一個字符串矢量。我寫下「退出」來擺脫循環,並開始對每個字符串中的字母進行大寫。 顯然,問題出在第2部分。我正在嘗試做的是: 1-當我們循環時獲取一個字符串。 2一旦我們有了一個字符串,獲得該字符串的字符並將其轉換成uppercase.Do這對所有的字符。 3-對所有字符串執行此操作。

當我編譯它,我得到的所有正確的,除了被大寫的字符串。 我真的很困惑d:

+1

'串x:v'您選擇修改字符串的副本。你忘了參考。 – Borgleader 2014-12-02 17:42:39

回答

4
for(string x:v){ 
    for(char &j:x){ 
     j = toupper(j); 
    } 
} 

你把每一個角色出字符串的引用,但按值採取的字符串。嘗試

for (string& x : v){ 
    // […] 
} 

注意與C++ 1Z,我們將能夠使用簡潔的範圍爲基礎的for循環,使生活輕鬆了許多:

for (x : v) { // Captures by reference automatically 
    // […] 
} 
+0

非常感謝Columbo。我只是在想,只有chars需要參考。這本書沒有讓我想起它的載體。因此,對於每一個序列,我都需要通過引用來獲取它的「子」「事物」。 (對不起,命名不正確) – 2014-12-02 17:47:32

相關問題