toupper()无法在范围循环

时间:2016-07-10 01:38:02

标签: c++ visual-c++ toupper

任何人都可以对此不起作用吗?我测试了它是否通过将toupper()表达式更改为一个表达式来直接引用char,这个表达式使每个字符都为'X'并且有效,所以我不知道出了什么问题。

 for (decltype(words.size()) i = 0; i < words.size(); ++i) {
    for (auto &u : words[i])
        toupper(u);
    if ((i % 8) != 0)
        cout << words[i] << ' ';
    else
        cout << endl << words[i] << ' ';
}

2 个答案:

答案 0 :(得分:3)

这是因为您放弃了toupper()返回的内容。

要保存转换后的字符,请更改

toupper(u);

u = toupper(u);

答案 1 :(得分:1)

toupper签名为int toupper(int c),而非void toupper(char& c)。它返回修改后的值,它不会通过引用来改变任何东西。

也许你想做类似

的事情
std::transform(words[i].begin(), words[i].end(), words[i].begin(), [](char c) { return std::toupper(c); });