无法使用矢量使用toupper

时间:2013-08-19 01:01:05

标签: c++ vector toupper

我正在练习在<vector> string s中存储单词,然后将所有字母转换为大写,并在每行打印8个单词。除了我的代码的toupper()部分之外,一切正常。这一切都是:

vector<string> words;
string theWords;
string word;

while(cin >> word)
    words.push_back(word);

for(auto &i : words) {
    word = i;
    for(auto &j: word)
        j = toupper(j);
}

int k = 0;
for(auto i : words) {
    cout << i << " ";
    ++k;
    if(k % 8 == 0)
        cout << endl;
}

4 个答案:

答案 0 :(得分:2)

您要在word中存储新的更新字符串,但是您应该更新i

更改此

for(auto &i : words) {
    word = i;
    for(auto &j: word)    // word is updated, but your vector is not
        j = toupper(j);
}

......对此:

for (auto &i : words)      // for every string i in words vector
    for (auto &j : i)      // update your i, not word
        j = toupper(j);

答案 1 :(得分:2)

您正在将临时字符串“word”转换为大写字母,然后将其丢弃。

string word;

for(auto &i : words) {
    word = i; <<-- here
    for(auto &j: word)
        j = toupper(j);
}

您需要做的是

for(auto &i : words) {
    for(auto &j: i)
        j = toupper(j);
}

现场演示:http://ideone.com/pwQBQr#

答案 2 :(得分:0)

表达式word = i使用了字符串复制构造函数。 word不是向量中的那个。

答案 3 :(得分:0)

派对有点晚了,但这里是没有额外循环的版本。

for(auto &i : words)
    std::transform(i.begin(), i.end(), i.begin(), ::toupper);