0

任何人都可以阐明这不起作用吗?我通过将 toupper() 表达式更改为使每个字符都成为“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] << ' ';
}
4

2 回答 2

3

这是因为您正在丢弃toupper().

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

toupper(u);

u = toupper(u);
于 2016-07-10T01:39:33.073 回答
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); });
于 2016-07-10T01:41:49.137 回答