Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
1

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

18.08.2012, 07:19. Показов 4212. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне необходимо вводить слова на русском и чтобы,в дальнейшем,я мог их сравнивать с другими словами и выполнять ещё какие-то операции.В программе я пока что разбиваю фразу на слова,разделённые пробелом и вывожу их.
Когда я использовал 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,но ничего не вышло
Миниатюры
Вывод и ввод русских слов  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2012, 07:19
Ответы с готовыми решениями:

Некорректный вывод русских слов
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { setlocale(0, &quot;&quot;);...

Как настроить ввод русских символов и в дальнейшем вывод этих символов
Подскажите как в этом коде настроить ввод русских символов и в дальнейшем вывод этих символов....

Вывод русских слов в консоль
Здравствуйте! Хотел написать консольное приложение для собственного пользования и столкнулся, при...

Обеспечить ввод и вывод списка слов в прямом и обратном порядке, и вычисление числа слов в этом списке
Изменить программу так, чтобы она обеспечивала ввод и вывод списка символов в прямом и обратном...

15
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
18.08.2012, 08:19 2
Самый простой вариант перегнать исходник в кодировку 866
0
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
18.08.2012, 08:25  [ТС] 3
почему именно в эту кодировку?и перегнать сразу после ввода и работать с данными именно в этой кодировке?
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
18.08.2012, 08:59 4
Цитата Сообщение от alexey31415 Посмотреть сообщение
почему именно в эту кодировку?
Потому, что это кодировка которая используется в консоли

Цитата Сообщение от alexey31415 Посмотреть сообщение
и перегнать сразу после ввода и работать с данными именно в этой кодировке?
нет имеется ввиду сам исходный файл, *.cpp
0
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
18.08.2012, 09:25  [ТС] 5
Цитата Сообщение от defer Посмотреть сообщение
сам исходный файл, *.cpp
установить для файла кодировку?я что-то не видел такого в VS 2010
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
18.08.2012, 09:29 6
в меню файл есть пункт особые параметры сохранения, как-то так
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
18.08.2012, 09:31 7
CharToOem/OemToChar и обсуждать сдесь нечего!
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
18.08.2012, 09:34 8
Цитата Сообщение от Jupiter Посмотреть сообщение
CharToOem/OemToChar и обсуждать сдесь нечего!
Ну да, перегонять туда-сюда string в char, конечно, проще, чем один раз сменить кодировку
0
Jupiter
18.08.2012, 09:38
  #9

Не по теме:

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

0
60 / 60 / 7
Регистрация: 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);
и тоже не помогло,выводит ерунду какую-то
я достигал того,чтоб записанная фраза выводилась верно,но при этом фраза "Введите фразу" выводилась иероглифами
0
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 =)
0
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
18.08.2012, 15:50  [ТС] 12
я могу вывести русские слова,если фраза создана в программе,а мне нужно вывести фразу,которую я сначала ввёл,сохранил в переменной и вывел на экран
0
3 / 3 / 0
Регистрация: 16.05.2012
Сообщений: 36
18.08.2012, 15:59 13
C++
1
2
3
wstring msg;
wcin>>msg;
wcout<<msg<<endl;
0
Мой лучший друг-отладчик!
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
19.08.2012, 00:00 14
можно заюзать system("chcp 1251");

Я так всегда делаю.
0
60 / 60 / 7
Регистрация: 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;
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
19.08.2012, 07:30 16
Тема обсуждалась не раз. У меня работает вот такой вариант
1) подключаешь #include <windows.h>
2) в свойствах консоли ставишь язык Lucida Console
3) в начале программы прописываешь
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
0
19.08.2012, 07:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2012, 07:30
Помогаю со студенческими работами здесь

Ввод слов с клавиатуры и вывод их на экран
Только начала изучение С++. Написала маленькую программку. Хочу, чтобы на экране после предложения...

Ввод строки со словами и построчный вывод слов
11. Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в...

Ввод/вывод строки с подсчетом количества слов
Ввести строку, вывести ее на экран и посчитать кол-во слов в строке. Пожалуйста, нужно в скором...

Задан массив русских слов. Напечатать все пары слов, образующих рифму
Задан массив русских слов. Напечатать все пары слов, образующих рифму Напишите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru