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); });
Другие вопросы по тегам