Николай Веселуха
Высший разум
(360698)
10 лет назад
Есть тип wchar_t для символов и wstring для строк, которые используются для кодирования в Unicode. Чтобы этой возможностью воспользоваться нужно соблюсти некоторые условия.
Во-первых, перед тем как осуществлять их ввод/вывод, нужно указать локализацию. Для это первыми строками в main записать две строки:
wcin.imbue(locale(".866"));
wcout.imbue(locale(".866"));
после чего можно использовать "широкие символы", но для их различия требуется явно указывать их тип, указывая заглавную букву L"строка". А для потоков ввода/вывода - wcin/wcout соответственно.
И везде где будут использоваться такие символы/строки, нужно узнавать существует ли их поддержка на уровне используемого класса.
Пример:
#include <iostream>
#include <string>
using namespace std;
int main() {
wcin.imbue(locale(".866"));
wcout.imbue(locale(".866"));
wcout << L" Введите строку: ";
wstring rus;
getline(wcin, rus);
wcout << L" Вы ввели строку: " << rus << endl;
wcout << L" Введите символ: ";
wchar_t ru;
wcin >> ru;
wcout << L" Вы ввели символ: " << ru << endl;
wstring test = L" тест";
wcout << L" Это" << test << L'.' << endl;
wchar_t russian[] = L" Мама мыла раму";
wchar_t point(L'.');
wcout << russian << point << endl;
cin.sync(); cin.get(); // а это гарантированная задержка консоли!!
return 0;
}
Peer-2-PeerМудрец (16172)
2 года назад
Одно смурно: неужели вообще нельзя обойтись без локализации? Ведь в самом Юникоде нет никаких локалей! Как я понимаю это imbue приходится использовать из-за того, что сама консоль по природе однобайтовая, а на уровне вывода из программы допустимо использовать даже многобайтовые символы.
Очень жаль, что природа консоли ещё не Юникодная.
ra Орально (98783)
Мыслитель
(8083)
10 лет назад
#include <iostream>
#include <locale.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Текст по-русски\n";
system("pause");
return 0;
}
Или Вы хотите, чтобы программа считывала русскоязычные символы и выводила их на консоль?
#include <iostream>
#include <string>
using namespace std;
int main()
{
wstring s;
wcin >> s;
wcout << s << "\n";
system("pause");
return 0;
}
БлондиночкаПрофи (534)
10 лет назад
Считывал не то, что я пишу в сиауте, а то, что я ввожу в консоль . Допустим я запускаю консоль и ввожу там предложение на русском, и пытаюсь вывести его, а выводятся не понятные символы !