[prg] C++ tolower не переводит кирилицу в нижний регистр
Здравствуйте, уважаемые!
Приходится огромное количество документации читать на английском, по этому,
видимо, где-то мог упустить из виду особенности использования метода
tolower. Вот код, который преобразует аббревиатуру из латинских символов в
нижний регистр и не преобразует из кирилических:
#include <string> // std::string
#include <locale> // std::locale, std::tolower
#include <fstream>
using namespace std;
int main () {
ofstream out("out.txt");
locale loc;
string str="IBM, ГТО\n";
for (string::size_type i=0; i<str.length(); ++i)
out << tolower(str[i],loc);
return 0;
}
Может ли этот метод перевести кирилические символы в нижний регистр? Если
да, то как?
Администратор Самарского голосового чата,
Самарского сервера LKF-книг
Грызунов Александр Викторович.
Приветствую всех.
...
Имеет смысл ещё и почитать документацию по std::locale.
Может, если вы установите соответствующую локаль. По умолчанию в коде
пролога программ на C/C++ устанавливается локаль "C", в которой нет
кириллических букв как понятия.
Вам нужно установить кодовую страницу, соответствующую тем строкам, которые
вы собираетесь преобразовывать (и еще принять во внимание, что консольное
окно Windows использует кодовую страницу 866, а GUI-приложения -- кодовую
страницу 1251).
Для ОС Windows и кодовой страницы 1251 (в которой, скорее всего, написан ваш
код), вместо вышеприведённой строки, можно попробовать поставить эту:
locale loc("russian_russia.1251");
...