С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
dext0r2010
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 11
#1

Сравнение русских слов - C++

18.10.2013, 22:52. Просмотров 1488. Ответов 11
Метки нет (Все метки)

Здравствуйте! Пишу программу для опроса людей (так сказать тест знаний). Так вот, программа задает вопрос, человек должен на него ответить, если отвечает правильно - выводиться сообщение "Ответ правильный", если нет - "Неверно".
Вот исходник С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <locale>
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "Russian");
    char otvet[256];
    char vopros[] = "Москва";
    cout << "Столица России:" << endl;
    cin >> otvet;
    if (strcmp(otvet, vopros) != 0)
    {
        cout << "Ответ правильный" << endl;
    }
    else
    {
        cout << "Неверно" << endl;
    }
    return 0;
}
Проблема вот в чем, когда ввожу любое слово, букву или цифру, будет выдавать сообщение "Ответ правильный". К примеру ввожу Москва - "Ответ правильный", ввожу цифры - "Ответ правильный". Что делать? В чем ошибка?

Добавлено через 1 час 35 минут
Кто-нибудь поможет???

Добавлено через 14 секунд
Кто-нибудь поможет???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 22:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение русских слов (C++):

Сравнение русских слов - C++
Как сравнить русские слова? Имеется вот такой код. При сравнении слов не выводит перевод { case 1: { cout &lt;&lt; &quot;Введите...

Дана строка, состоящая из русских слов. Найти количество слов, которые содержат ровно три буквы «А» - C++
Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Найти количество...

Сравнение русских символов. - C++
Проблема с русскими символами. Русские символы заносятся в массив занимая две ячейки( 2 байта ). Думаю это связано с UTF-8 кодировкой. ...

Сравнение русских букв с их кодами - C++
Всем доброго времени суток. Имеется проблема ввода русского языка в консоле(!), при выполнении программы. Суть задания: пользователь...

Дано строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). ​​Определить количество слов, которые заканчиваются одной и той - C++
Дано строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). ​​Определить количество слов, которые заканчиваются...

Вывод и ввод русских слов - C++
Мне необходимо вводить слова на русском и чтобы,в дальнейшем,я мог их сравнивать с другими словами и выполнять ещё какие-то операции.В...

11
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
19.10.2013, 00:24 #2
strcmp возвращает 0 если строки идентичны.
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
19.10.2013, 00:53 #3
1.
C++
1
if (!strcmp(otvet,vopros))
2. Вы уверены, что ввод происходит в кодировке Win-1251?
0
dext0r2010
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 11
19.10.2013, 11:14  [ТС] #4
Цитата Сообщение от gazlan Посмотреть сообщение
2. Вы уверены, что ввод происходит в кодировке Win-1251?
Нет, я даже не знаю в какой кодировке все происходит. Как это можно проверить?
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
19.10.2013, 11:36 #5
Тот (русский) текст, что мы видим сейчас на экране - 1251. setlocale (LC_ALL,"Russian"); требует конверсии при вводе\выводе, но я не уверен, что это реально у вас работает. Смотреть лучше всего в отладчике.
И почитайте эту тему: Русские шрифты в консоли
0
dext0r2010
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 11
19.10.2013, 11:51  [ТС] #6
gazlan, вот почитал тему и решил попробовать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <Windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char otvet[256];
    char vopros[] = "Москва";
    cout << "Столица России:" << endl;
    cin >> otvet;
    if (!strcmp(otvet,vopros))
    {
        cout << "Ответ правильный" << endl;
    }
    return 0;
}
Сравнение строк проходит нормально, но вот с русским текстом ничего не получается, все "крякозябрами".
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
19.10.2013, 12:19 #7
Через одно место...

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(int argc,char** argv)
{  
   SetConsoleCP(866);
   SetConsoleOutputCP(866);
 
   char otvet [MAX_PATH];
   char vopros[MAX_PATH];
 
   strcpy(vopros,"Москва");
 
   char    pszDst[MAX_PATH];
 
   CharToOem("Столица России:",pszDst);
 
   cout << pszDst << endl;
   cin >> otvet;
 
   OemToChar(otvet,pszDst);
 
   if (!strcmp(pszDst,vopros))
   {
      CharToOem("Ответ правильный",pszDst);
      
      cout << pszDst << endl;
   }
 
   return 0;
}
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2013, 12:40 #8
Цитата Сообщение от dext0r2010 Посмотреть сообщение
Сравнение строк проходит нормально, но вот с русским текстом ничего не получается, все "крякозябрами".
В свойствах консоли, шрифт Lucida Console, выбран? Среда какая?
0
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
19.10.2013, 13:04 #9
dext0r2010,

Не по теме:

Не забудьте сделать тогда уж несколько вариантов ответа: "Москва", "москва", "масква"и тд. В наше время этим грешат не только школьники. А насчет дат тем более, там возможны разные варианты написания, как числами, так и словами.

0
dext0r2010
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 11
19.10.2013, 13:56  [ТС] #10
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
В свойствах консоли, шрифт Lucida Console, выбран? Среда какая?
Среда Visual Studio 2010. Как открыть свойства консоли я не знаю. Если вам не сложно, можете подсказать?

Добавлено через 51 секунду
Folko, я пишу научную работу, так что думаю это не понадобится.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2013, 13:57 #11
Установка шрифта Lucida Console
Если ОС 7, то в свойствах по умолчанию делайте.
1
dext0r2010
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 11
19.10.2013, 14:47  [ТС] #12
alsav22, спасибо, помогло!
0
19.10.2013, 14:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 14:47
Привет! Вот еще темы с ответами:

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

Циклы и присвоение русских слов - C++
Привет! Хочется написать программу, чисто для интереса. Вот моя прога, ниже, она теоритически должна делать следующее – в ней находится...

Поиск слов в строке состоящей из русских символов. - C++
Здравствуйте. Помогите пожалуйста с программой. Мне нужно найти местоположение слова в строке вводимой с консоли. #include &lt;iostream&gt;...

Запись в файл. Функция ввода русских слов - C++
Код дал преподаватель, не реализуется функция Readline, выдает две ошибки: Ошибка 1 error LNK2005: &quot;char * __cdecl ReadLine(char...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.