Форум программистов, компьютерный форум CyberForum.ru

Установка locale (той которой от с++) - C++

Восстановить пароль Регистрация
 
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
30.11.2012, 17:11     Установка locale (той которой от с++) #1
Как это правильно сделать?
C++
1
std::locale::global(std::locale("ru_RU.cp1251"));
так получаю эксепшн. Компилятор gcc. Мне это необходимо потому что я обрабатываю строки с русским текстом и если в visual studio она там как-то автоматом устанавливает locale и собирает проект так что строки с русским текстом сравниваются нормально то в gcc же я так понимаю пока я не установлю locale правильно строки типа string буду возвращать "слово" != "слово".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2012, 17:11     Установка locale (той которой от с++)
Посмотрите здесь:

C++ Напечатать квадрат той матрицы, в которой наименьший след
Вывести в новый файл информацию о той продукции, количество которой менее заданной величины. C++
Определить номер той строки, в которой больше всего согласных букв C++
C++ Получить текущий locale. (category, * locale)
C++ Сумму элементов в той строке, в которой нет отрицательных чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
30.11.2012, 17:51     Установка locale (той которой от с++) #2
http://www.rsdn.ru/forum/cpp/3006223.flat
Nalik
 Аватар для Nalik
44 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 582
30.11.2012, 17:52     Установка locale (той которой от с++) #3
Подключаешь библиотеку #include <clocale> и в коде main пишешь setlocale(LC_CTYPE, "Russian"); //Руссификатор
Пример кода:

C++
1
2
3
4
5
6
7
#include <clocale>
using namespace std;
main () 
{
setlocale(LC_CTYPE, "Russian"); //Поддержка русских символов в с++
cout << "Выводим русские слова на экран";
}
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
30.11.2012, 17:53     Установка locale (той которой от с++) #4
Здесь вроде расписано.
Впрочем, юзайте юникод и да будет Вам счастье.
Кликните здесь для просмотра всего текста
The C++ strings library provides the definitions of the basic_string class, which is a class template specifically designed to manipulate strings of characters of any character type. It also includes two specific instantiations: string and wstring, which respectively use char and wchar_t as character types.
И пара ссылок
Вот ещё - насколько я помню wchar в винде 2х битный, поэтому всю таблицу юникода не вмещает, но оно нам и не надо - для русского 2х байтов достаточно. На линукс 99% 4 байта.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
01.12.2012, 14:50  [ТС]     Установка locale (той которой от с++) #5
Nalik, это ты сишную цацку вспомнил, она мне не помогает, я уже пробовал.
В общем попробовал все предложенные варианты: строки string оно то хранит и выводит как русские, другое дело что при сравнении строк оно всегда говорит что они не равны нифига. Ну его нафиг этот gcc, пойду думать что сделать с студией чтобы она таки отдала x86 приложение ... не переписывать же мне ради gcc всё на wstring.

Добавлено через 17 часов 3 минуты
Разобрался в проблеме: собственно студия позволяет чтобы ifstream.open принимало аргмент типа string, а gcc этого не позволяло и я написал как аргумент к нему string.c_str() из-за чего в одном месте при открытии файла чтение происходило некорректно (имя файла было на русском) ну и в общем после этого сравнивало оно тоже некорректно ...
gigas
7 / 1 / 1
Регистрация: 30.11.2012
Сообщений: 91
01.12.2012, 15:03     Установка locale (той которой от с++) #6
а можно так же скачать файл gccrus а так же g++rus и заменить их в bin, где установлена программа и тогда программа будет на русском компилировать!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 00:03     Установка locale (той которой от с++)
Еще ссылки по теме:

C++ Как кинуть исключение std::locale::global(std::locale("");
Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово C++
C++ Матрицы. Распечатать квадрат той из них, в которой сумма элементов в двух главных диагоналях меньше

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
02.12.2012, 00:03     Установка locale (той которой от с++) #7
Цитата Сообщение от Gepar Посмотреть сообщение
не переписывать же мне ради gcc всё на wstring
Так и будем сидеть в омуте однобайтовых кодировок. Переписать на wstring как два пальца об асфальт - в строковых константах добваляем L
C++
1
std::cout << L"Hello world!" << std::endl;
Перед string пишем w-
C++
1
std::cout << std::wstring(L"Hello world!") << std::endl;
И всё!
Yandex
Объявления
02.12.2012, 00:03     Установка locale (той которой от с++)
Ответ Создать тему
Опции темы

Текущее время: 02:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru