tolower () возвращает число вместо строчной формы?

Я пишу программу, которая запрашивает ввод букв и сортирует их по буквам и вхождению на основе ввода. Я в конце своего кода и пытаюсь преобразовать заглавные буквы в строчные. Я пытаюсь сделать это:

cout << tolower(char('A'+i)) << " " << alphabets[i] <<endl;

Но tolower() выводит число вместо строчной версии буквы? Как например, ввод "aaaa" дает мне :

97 4

и ввод "bbbbb" дает мне:

98 5

Но когда я вынимаю tolowerвведите как "aaa" будет:

А 3

Я не понимаю, почему это происходит.

0

Решение

tolower Это древняя функция, унаследованная от C 1970-х годов, до надежного существования сигнатур функций и до того, как люди действительно заботились о различных целочисленных типах выражений.

Таким образом, он игнорирует типы и возвращает символ в int, Три альтернативы:

  1. В ролях: static_cast< char >( std::tolower( 'A' + i ) ),
  2. Используйте переменную: char lower = std::tolower( 'A' + i );
  3. Использовать более новая перегрузка: std::tolower( 'A', std::locale() ),
3

Другие решения

tolower и принимает, и возвращает int, и std::cout не может знать, что int вернулся представляет собой char значение. Вы можете исправить это, преобразовав в char:

cout << static_cast<unsigned char>(tolower(char('A'+i)))
<< " " << alphabets[i] << endl;
1

По вопросам рекламы [email protected]