Нужно ли мне приводить к беззнаковому символу перед вызовом toupper(), tolower() и др.?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Нужно ли мне приводить к беззнаковому символу перед вызовом toupper(), tolower() и др.?

Сообщение Anonymous »

Недавно кто-то с высокой репутацией здесь, в Stack Overflow, написал в комментарии, что необходимо привести аргумент char к unsigned char перед вызовом std::toupper и std::tolower (и подобных функций).
С другой стороны, Бьёрн Страуструп не упоминает о необходимости делать это в языке программирования C++. Он просто использует toupper, например

Код: Выделить всё

string name = "Niels Stroustrup";

void m3() {
string s = name.substr(6,10);  // s = "Stroustr up"
name.replace(0,5,"nicholas");  // name becomes "nicholas Stroustrup"
name[0] = toupper(name[0]);   // name becomes "Nicholas Stroustrup"
}
(Цитата из указанной книги, 4-е издание.)
В ссылке говорится, что ввод должен быть представлен как беззнаковый символ.
Для меня это звучит так, как будто это справедливо для каждого символа, поскольку char и беззнаковый символ имеют одинаковый размер.
Так что это приведение ненужно или это было Страуструпом небрежно?
Изменить: в руководстве libstdc++ упоминается, что входной символ должен быть из базового исходного набора символов, но не выполняется приведение. Я думаю, это описано в ответе @Keith Thompson, все они имеют положительное представление как знаковый символ и беззнаковый символ?

Подробнее здесь: https://stackoverflow.com/questions/218 ... ower-et-al
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»