Не могу привести кириллицу к верхнему регистру
Пытался привести кириллицу к верхнему регистру используя wchar_t. Для этого был написан следующий код:
int main(int argc, char *argv[]){
setlocale(LC_ALL, "rus");
wchar_t strr[] = L"Привет";
for(int i = 0; strr[i] != '\0'; ++i)
strr[i] = towupper(strr[i]);
wcout << strr << endl;
return 0;
}
На выходе получаю следующее: Privet
Хотя ожидается, что слово будет приведено к верхнему регистру. Работаю из Ubuntu 20.04 и сперва думал, что проблема из-за отсутствия русской локали, однако после установки таковой ничего не изменилось.
Ответы (1 шт):
Я сделал буквально одно маленькое изменение и все работает
int main(int argc, char *argv[]){
std::setlocale(LC_ALL, "uk_UA.utf8");
wchar_t strr[] = L"Привет";
for(int i = 0; strr[i] != '\0'; ++i)
strr[i] = std::towupper(strr[i]);
std::wcout << strr << std::endl;
return 0;
}
с указанием std::setlocale(LC_ALL, "ru_RU.utf8"); у меня не работает нормально. Потом вернул setlocale(LC_ALL,"uk_UA.utf8"); (заметьте, что setlocale и std::setlocale - это могут быть две разные функции!!!) и все равно все работает. А с "rus" - никак.
Но потом я посмотрел в вывод locale -a и понял, что нет у меня этой локали. Поэтому, добавляем локаль, проверяем, что она есть, а потом, код заработает.
Добавляем локали
sudo locale-gen ru_RU
sudo locale-gen ru_RU.UTF-8
sudo update-locale