toupper() не работает в цикле для диапазона
Может кто-нибудь пролить свет на это не работает? Я проверил, правильно ли он ссылался на char, изменив выражение 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] << ' ';
}
2 ответа
Решение
Это потому, что вы отбрасываете то, что возвращается toupper()
,
Чтобы сохранить преобразованные символы, измените
toupper(u);
в
u = toupper(u);
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); });