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

Русский текст без танцев с бубнами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти сумму последовательности чисел, если известно их количество http://www.cyberforum.ru/cpp-beginners/thread382048.html
Доброго времени суток тому, кто поможет! Сам я разве что видоизменял конструкцию, но так до конца и не разобрался, задание во вложении...
C++ Приведение типов Делаю программу, которая кроме всего прочего должна отсортировать массив. Использую для этого qsort. Вот что получилось: struct Storage { int count; // Кол-во занятых строк int allocated; // Кол-во строк, для которых выделена память char** pchar; // Массив указателей на строки http://www.cyberforum.ru/cpp-beginners/thread382045.html
C++ Упорядочивание данных в структуре
Привет и заранее спасибо тем, кто поможет! 1 вложение-задание, 2-код, что давал преподаватель, 3-что написал сам. Не могу разобраться с упорядочиванием по номеру поезда, а так же в конце необходимо сделать так, чтобы при выводе поезда потом при нажатии любой клавиши можно было узнать про другой, а то он просто выбрасывает из программы... Это не повтор, упорядочивания по номеру поезда...
не сходится сумма C++
#include <vcl.h> #include <iostream.h> #include <conio.h> #include <math.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv)
C++ Как можно ТАК обащаться к массиву? http://www.cyberforum.ru/cpp-beginners/thread382036.html
код взял тут http://www.cyberforum.ru/cpp-beginners/thread298757.html #include <iostream> #include <string> using namespace std; int HorspoolMatch(string T,string P) { int n=T.length(); int m=P.length();
C++ Определить является ли последовательность арифметической прогрессией #include <iostream> using namespace std; const int n = 10; int main() { int a; int i, imax=0, imin=0; подробнее

Показать сообщение отдельно
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
11.11.2011, 22:39     Русский текст без танцев с бубнами
Доброго времени суток.

Решил раз и навсегда понять, как выводить русские буквы на консоль без всяких танцев с system("chcp ...") или SetConsoleCP. Интересует вариант, при котором исходник неизменно хранится в UTF-8, и компилируется на разных платформах. В частности интересуют *nix, cygwin, mingw. Пробовал такой вариант:

Вариант с std::wstring
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
 
int main( )
{
    std::wcout << L'>';
 
    std::wstring input;
    getline( std::wcin, input );
 
    std::wcout << input;
 
    input = L",Здравствуй, мир!";
 
    std::wcout << L'\n' << input;
 
    return 0;
}
Цитата Сообщение от MinGW (gcc 4.6.1)
>Привет, мир!
Привет, мир!
,
Цитата Сообщение от Cygwin (gcc 4.5.3)
>здравствуй, мир!

,
(оба сожрали строки, начиная с первой русской буквы)


И такой:

Вариант с std::string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
 
int main( )
{
    std::cout << '>';
 
    std::string input;
    getline( std::cin, input );
 
    std::cout << input;
 
    input = ",Здравствуй, мир!";
 
    std::cout << '\n' << input;
 
    return 0;
}
Цитата Сообщение от MinGW (gcc 4.6.1)
>здравствуй, мир!
здравствуй, мир!
,╨Ч╨┤╤А╨░╨▓╤Б╤В╨▓╤Г╨╣, ╨╝╨╕╤А!
(что вполне ожидаемо)
Цитата Сообщение от Cygwin (gcc 4.5.3)
>здравствуй, мир!
здравствуй, мир!
,Здравствуй, мир!
(опа!)


И тут мне стало интересно, почему они сожрали std::wstring, начиная с первой встреченной русской буквы, и почему вдруг на cygwin заработал вариант с std::string, хотя std::wstring всё так же успешно сжирается? И самое главное: как сделать так, чтобы и std::wstring, и std::string корректно работали с русскими символами под всеми платформами без перекодирования исходника в нативную кодировку системы.

С локалями тоже не удалось:
std::locale

C++
1
2
3
4
// валится уже на конструкторе std::locale
std::locale( "rus_rus.1251" );
std::locale( "Russian_Russia.1251" );
// и подобные
оба (mingw и cygwin) выдают следующее:
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Точно так же cygwin ругается на
C++
1
std::locale("");
MingW это кушает, но продолжает уверенный и наглый вывод в левой кодировке.
у mingw


В общем, я несколько в замешательстве. Стандартная библиотека C++ (и Си по возможности) предоставляет средства для решения подобных проблем?

Добавлено через 16 минут

Не по теме:

Возможно, стоило разместить эту тему в ветке "Кроссплатформенная разработка"?

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