Я пишу программу, которая запрашивает ввод букв и сортирует их по буквам и вхождению на основе ввода. Я в конце своего кода и пытаюсь преобразовать заглавные буквы в строчные. Я пытаюсь сделать это:
cout << tolower(char('A'+i)) << " " << alphabets[i] <<endl;
Но tolower()
выводит число вместо строчной версии буквы? Как например, ввод "aaaa"
дает мне :
97 4
и ввод "bbbbb"
дает мне:
98 5
Но когда я вынимаю tolower
введите как "aaa"
будет:
А 3
Я не понимаю, почему это происходит.
tolower
Это древняя функция, унаследованная от C 1970-х годов, до надежного существования сигнатур функций и до того, как люди действительно заботились о различных целочисленных типах выражений.
Таким образом, он игнорирует типы и возвращает символ в int
, Три альтернативы:
static_cast< char >( std::tolower( 'A' + i ) )
,char lower = std::tolower( 'A' + i );
std::tolower( 'A', std::locale() )
,tolower
и принимает, и возвращает int, и std::cout
не может знать, что int
вернулся представляет собой char
значение. Вы можете исправить это, преобразовав в char
:
cout << static_cast<unsigned char>(tolower(char('A'+i)))
<< " " << alphabets[i] << endl;