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 一旦我们有了一个字符串,在该字符串中获取一个字符并将其转换为大写。对所有字符执行此操作。3-对所有字符串执行此操作。

当我编译它时,除了字符串被大写外,我都得到了正确的结果。我真的很困惑 D:

4

1 回答 1

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
    // […]
}
于 2014-12-02T17:42:25.867 回答