将字符串中的字符转换为大写不起作用

时间:2014-12-02 17:40:31

标签: c++ string toupper

我有这个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:

1 个答案:

答案 0 :(得分: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
    // […]
}