Как перевести русские буквы в нижний регистр?
Весь вопрос в заголовке. Пользуюсь Linux.
if (c >= 'а' && c <= 'п')
c += 'А' - 'а';
else if (c >= 'р' && c <= 'я')
c += 'Р' - 'р';
else if (c == 'ё')
c = 'Ё';
Сейчас заметила, не работает просто
char ch = 'г';
std::cout<<ch<<std::endl;
Попробовала с w_char
w_char ch = 'г';
std::wcout<<ch<<std::endl;
Выводит иероглиф. В интернете есть решение с литералом L. Но его нельзя поставить перед переменной.
Ответы (2 шт):
Не английские слова лучше всего обрабатывать через библиотеку ICU. Нашел примеры https://www.delftstack.com/howto/cpp/how-to-convert-string-to-uppercase-cpp/
Несколько способов оттуда. Upper заменить на lower и должно работать.
std
#include <iostream>
#include <algorithm>
#include <string>
using std::cout; using std::string;
using std::endl; using std::cin;
using std::transform; using std::toupper;
string capitalizeString(string s)
{
transform(s.begin(), s.end(), s.begin(),
[](unsigned char c){ return toupper(c); });
return s;
}
int main() {
string string1("hello there είναι απλά ένα κείμενο χωρίς");
cout << "input string: " << string1 << endl
<< "output string: " << capitalizeString(string1) << endl << endl;
return 0;
}
ICU
Компилить с линковкой на icu
g++ sample_code.cpp -licuio -licuuc -o sample_code
Пример
#include <iostream>
#include <string>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <unicode/locid.h>
using std::cout; using std::string;
using std::endl; using std::cin;
using std::transform; using std::toupper;
int main() {
string string1("hello there είναι απλά ένα κείμενο χωρίς");
icu::UnicodeString unicodeString(string1.c_str());
cout << "input string: " << string1 << endl
<< "output string: " << unicodeString.toUpper() << endl;
return 0;
}
Пример кода из вопроса подойдет для 8-битных кодировок вроде cp1251, cp866, koi-8. Для utf надо отбрасывать префиксы алфавитов
Ставим локаль. Используем тип буквы wchar_t и потоки только wcin ,wcout. Считываем букву и уменьшаем её размер.
# include <locale>
# include <iostream>
int main(){
setlocale(LC_ALL,"ru_RU.UTF-8");
wchar_t c ;
std::wcin>>c;
std::wcout<<L"Вход = "<<c<<std::endl;
c=towlower(c);
std::wcout<<L"Выход = "<<c<<std::endl;
}
Г
Вход = Г
Выход = г