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

Вывод и ввод русских слов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
18.08.2012, 07:19     Вывод и ввод русских слов #1
Мне необходимо вводить слова на русском и чтобы,в дальнейшем,я мог их сравнивать с другими словами и выполнять ещё какие-то операции.В программе я пока что разбиваю фразу на слова,разделённые пробелом и вывожу их.
Когда я использовал setlocale(0,""),то введённые фразы на русском языке при выводе отображались кракозяброй,если использовал нынешний вариант,то слова выводятся на русском,но при отладке в объекте string буквы хранятся в виде непонятных символов и заранее записанные фразы выводятся тоже некорректно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int main()
{
    locale loc("Russian");
    cout.imbue(loc);
 
    string phrase;
    vector<string>  words;
    char *tokenPtr;
 
    cout << "Введите фразу" << endl;
 
    getline(cin,phrase);
 
    tokenPtr = strtok(const_cast<char *>(phrase.c_str())," ");
 
    size_t i = 0;
 
    while(tokenPtr)
    {
        words.push_back(tokenPtr);
 
        cout << words.at(i++) << endl;
        tokenPtr = strtok(NULL," ");
    }
 
    system("pause");
    return 0;
}
P.S.:пробывал использовать функции MultiByteToWideChar и WideCharToMultiByte,но ничего не вышло
Миниатюры
Вывод и ввод русских слов  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2012, 07:19     Вывод и ввод русских слов
Посмотрите здесь:

Ввод русских символов. C++
Дано строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). ​​Определить количество слов, которые заканчиваются одной и той C++
Вывод на экран чётных слов строки исправить на вывод нечётных слов C++
C++ Дана строка, состоящая из русских слов. Найти количество слов, которые содержат ровно три буквы «А»
C++ Ввод русских символов в консоли
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.08.2012, 08:19     Вывод и ввод русских слов #2
Самый простой вариант перегнать исходник в кодировку 866
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
18.08.2012, 08:25  [ТС]     Вывод и ввод русских слов #3
почему именно в эту кодировку?и перегнать сразу после ввода и работать с данными именно в этой кодировке?
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.08.2012, 08:59     Вывод и ввод русских слов #4
Цитата Сообщение от alexey31415 Посмотреть сообщение
почему именно в эту кодировку?
Потому, что это кодировка которая используется в консоли

Цитата Сообщение от alexey31415 Посмотреть сообщение
и перегнать сразу после ввода и работать с данными именно в этой кодировке?
нет имеется ввиду сам исходный файл, *.cpp
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
18.08.2012, 09:25  [ТС]     Вывод и ввод русских слов #5
Цитата Сообщение от defer Посмотреть сообщение
сам исходный файл, *.cpp
установить для файла кодировку?я что-то не видел такого в VS 2010
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.08.2012, 09:29     Вывод и ввод русских слов #6
в меню файл есть пункт особые параметры сохранения, как-то так
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.08.2012, 09:31     Вывод и ввод русских слов #7
CharToOem/OemToChar и обсуждать сдесь нечего!
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.08.2012, 09:34     Вывод и ввод русских слов #8
Цитата Сообщение от Jupiter Посмотреть сообщение
CharToOem/OemToChar и обсуждать сдесь нечего!
Ну да, перегонять туда-сюда string в char, конечно, проще, чем один раз сменить кодировку
Jupiter
18.08.2012, 09:38
  #9

Не по теме:

<sarcasm>
defer, ну да проще сменить кодировку чем перейти на линукс где utf-8 как родной
</sarcasm>

alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
18.08.2012, 14:13  [ТС]     Вывод и ввод русских слов #10
Цитата Сообщение от Jupiter Посмотреть сообщение
CharToOem/OemToChar
не помогло

Цитата Сообщение от defer Посмотреть сообщение
в меню файл есть пункт особые параметры сохранения
поменял на uTF8,потом использовал
C++
1
2
3
4
MultiByteToWideChar(CP_UTF8,0,phrase.c_str(),
            -1,Temp,sizeof(Temp));
    WideCharToMultiByte(CP_ACP,0,Temp,-1,AnsiTemp,
            sizeof(AnsiTemp),NULL,NULL);
и тоже не помогло,выводит ерунду какую-то
я достигал того,чтоб записанная фраза выводилась верно,но при этом фраза "Введите фразу" выводилась иероглифами
D-Vampire
3 / 3 / 0
Регистрация: 16.05.2012
Сообщений: 36
18.08.2012, 15:32     Вывод и ввод русских слов #11
C++
1
2
wcout.imbue(std::locale("rus_rus.866"));
wcout<<L"блаблабла"<<endl;
добавьте уже это в faq =)
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
18.08.2012, 15:50  [ТС]     Вывод и ввод русских слов #12
я могу вывести русские слова,если фраза создана в программе,а мне нужно вывести фразу,которую я сначала ввёл,сохранил в переменной и вывел на экран
D-Vampire
3 / 3 / 0
Регистрация: 16.05.2012
Сообщений: 36
18.08.2012, 15:59     Вывод и ввод русских слов #13
C++
1
2
3
wstring msg;
wcin>>msg;
wcout<<msg<<endl;
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
19.08.2012, 00:00     Вывод и ввод русских слов #14
можно заюзать system("chcp 1251");

Я так всегда делаю.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
19.08.2012, 04:59  [ТС]     Вывод и ввод русских слов #15
ни один из способов не помог

Добавлено через 16 минут
быть может я что-то делаю неправильно
стоит кодировка 1251(пробывал ставить 866,и юникод 1200)
C++
1
2
3
4
5
6
7
wchar_t unic[32];
 
    cout << "Введите фразу" << endl;
 
    wcin >> unic;
 
    wcout << unic << endl;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2012, 07:30     Вывод и ввод русских слов
Еще ссылки по теме:

C++ Ввод русских букв
C++ Ввод слов с клавиатуры и вывод их на экран
C++ Поменять консольный ввод-вывод на файловый ввод-вывод

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

Или воспользуйтесь поиском по форуму:
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
19.08.2012, 07:30     Вывод и ввод русских слов #16
Тема обсуждалась не раз. У меня работает вот такой вариант
1) подключаешь #include <windows.h>
2) в свойствах консоли ставишь язык Lucida Console
3) в начале программы прописываешь
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Yandex
Объявления
19.08.2012, 07:30     Вывод и ввод русских слов
Ответ Создать тему
Опции темы

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