Что я должен делать, когда использую std :: isupper () с подчеркнутой буквой - PullRequest
1 голос
/ 22 марта 2020

Я должен проверить, является ли первый символ строки нижним или верхним регистром.

Это хорошо работает, когда я использую имена engli sh, такие как Дэвид, но когда имя с подчеркнутой буквой появляется как Á, É, Í, Ó et c .... (как Árpád), тогда он думает, что это строчные буквы.

string name;
std::cin>>name;

if(std::isupper(name[0]))
{
std::cout<<"Upper case"<<std::endl;
}
else
{
std::cout<<"Lower case"<<std::endl;
}

1 Ответ

6 голосов
/ 22 марта 2020

По умолчанию, версия std::isupper() / std::islower() используется только для работы с ASCII-буквами (ABCDEFGHIJKLMNOPQRSTUVWXYZ и abcdefghijklmnopqrstuvwxyz). Для работы с другими кодировками сначала необходимо позвонить std::setlocale() или использовать std::locale версию std::isupper() / std::islower(), чтобы переключиться на набор символов, который поддерживает интересующие вас символы.

...