toupper() 在 for range 循环中不工作
toupper() not working in a for range loop
任何人都可以阐明这不起作用吗?我测试了它是否通过将 toupper() 表达式更改为使每个字符都成为 'X' 的表达式来正确地直接引用 char,并且它起作用了,所以我不知道出了什么问题。
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] << ' ';
}
这是因为您丢弃了 toupper()
返回的内容。
要保存转换后的字符,更改
toupper(u);
至
u = toupper(u);
toupper
签名是 int toupper(int c)
,而不是 void toupper(char& c)
。它 returns 修改后的值,它不会通过引用改变任何内容。
也许你想做类似的事情
std::transform(words[i].begin(), words[i].end(), words[i].begin(), [](char c) { return std::toupper(c); });
任何人都可以阐明这不起作用吗?我测试了它是否通过将 toupper() 表达式更改为使每个字符都成为 'X' 的表达式来正确地直接引用 char,并且它起作用了,所以我不知道出了什么问题。
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] << ' ';
}
这是因为您丢弃了 toupper()
返回的内容。
要保存转换后的字符,更改
toupper(u);
至
u = toupper(u);
toupper
签名是 int toupper(int c)
,而不是 void toupper(char& c)
。它 returns 修改后的值,它不会通过引用改变任何内容。
也许你想做类似的事情
std::transform(words[i].begin(), words[i].end(), words[i].begin(), [](char c) { return std::toupper(c); });