С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
1

Сравнение двух строк (экземпляры класса string ) задействуя метод compare

20.12.2015, 22:06. Показов 3713. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, мне необходимо сравнить два экземпляра класса string, один из экземпляров вводится с клавиатуры, второй экземпляр берется из строкового массива. Проблема заключается в том, что при сравнении одного слова программа выполняет работу корректно, в случае же, если вводятся слова через пробел то сравнение не происходит, либо происходит неверно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
do {
        srand(time(0));
        int i = rand() % 73;
        cout << mas[i];
        cout << "\n" << tr[i];
        cout << "\nEnter your translation: ";
        cin >> n;
        if (n.compare(tr[i]) == 0) cout << "\nYou're goddamn right";
        else cout << "\nYou're wrong";
        cout << "\nВы хотите выйти Y/N: ";
        cin >> exit;
        cout << endl;
    } while (exit != 'y' || exit != 'Y');
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2015, 22:06
Ответы с готовыми решениями:

Метод compare string
Всем привет! Не могу понять в чем у меня ошибка! Применяю метод compare из string, но компилятор...

Сравнение двух строк string
Добрый день. Никак не пойму почему не хочет работать такой способ сравнения двух string строк,...

Сравнение строк с помощью String.Compare
Доброго времени суток. Нужна помощь с String.Compare. В общем, ввожу строку. Разбиваю сплитом на...

String.Compare - сравнение строковых величин
Не знаю,как в моем статическом методе &quot;Sravnenie&quot; сравнить строковые величины(ylica, name)...знаю,...

14
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
20.12.2015, 22:45 2
Цитата Сообщение от Marned Посмотреть сообщение
cin >>
считывает строку до появления первого пробела, поэтому одно введенное слово корректно обрабатывается а несколько слов - нет
1
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 22:50  [ТС] 3
Можете ли тогда подсказать как можно сравнивать более одного слова? Со string раньше не работал, вот решил попробовать и выявил такую проблему.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
20.12.2015, 22:55 4
как вариант, использовать gets она считывает все, введенное с клавиатуры
1
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 23:20  [ТС] 5
Да, спасибо, с этим разобрался, использовал getline. Но теперь срабатывает лишь один раз, затем нет возможности выйти из цикла и ввести новое слово.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
20.12.2015, 23:22 6
оно показывает результат. спрашивает,хотите ли продолжить и виснет?
1
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 23:42  [ТС] 7
В первый раз происходит нормальное срабатывание, в конце предлагается выход из цикла, независимо от того какой символ был введен для exit, программа повторяется, но вместо переменной n вводится пустое значение.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
20.12.2015, 23:44 8
так очень сложно что-либо говорить, не видя листинг
0
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 23:46  [ТС] 9
Здесь еще отлавливал n и exit, думал что они не очищаются и из-за этого проблема.
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
29
30
31
32
33
34
35
36
37
do {
        //n = 0;
        //n = 'n';
        cout << n<<endl;
        srand(time(0));
        int i = rand() % 73;
        cout << mas[i]<<endl;
        cout << n << endl;
        cout << "\n" << tr[i]<<endl;
        cout << n << endl;
        cout << "\nEnter your translation: ";
        cout << n << endl;
        getline(cin, n);
        cout << n;
        if (n.compare(tr[i]) == 0)
        {
            cout << "\nYou're goddamn right"<<endl;
            cout << n << endl;
            cout << "1" << endl;
        }
        else
        {
            cout << "\nYou're wrong"; cout << n << endl;
            cout << "2" << endl;
        }
        cout << "\nВы хотите выйти Y/N: ";
        cout << n << endl;
        cout << "3" << endl;
        cin >> exit;
        cout << exit << endl;
        cout << n << endl;
        cout << "4" << endl;
        cout << endl;
        cout << exit << endl;
        cout << n << endl;
        cout << "5" << endl;
    } while (exit != 'y' || exit != 'Y');
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
20.12.2015, 23:49 10
Цитата Сообщение от Marned Посмотреть сообщение
В первый раз происходит нормальное срабатывание, в конце предлагается выход из цикла, независимо от того какой символ был введен для exit, программа повторяется, но вместо переменной n вводится пустое значение.
Если перед getline(), что-то вводится с помощью cin >>, то, перед getline(), нужно убрать '\n' из потока. Например, делать ввод так (можно всегда так, а не только перед getline()):
C++
1
(cin >> exit).get();
1
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 23:55  [ТС] 11
Если перед getline(), что-то вводится с помощью cin >>, то, перед getline(), нужно убрать '\n' из потока. Например, делать ввод так (можно всегда так, а не только перед getline()):
Перед getline() ничего не вводилось, был только вывод слов из массива string. Тем не менее заменил на способ предложенный вами, и проблему это не решило.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
21.12.2015, 00:04 12
Цитата Сообщение от Marned Посмотреть сообщение
Перед getline() ничего не вводилось,
После первого чтения getline() вводится exit:
Цитата Сообщение от Marned Посмотреть сообщение
cin >> exit;
Поэтому, если '\n' из потока не убрать, то второе чтение getline() проскочит. getline() прочитает '\n' из потока (для неё это пустая строка) и код пойдёт, без остановки на ввод, дальше.

Добавлено через 1 минуту
Вот так сделал?
Цитата Сообщение от nord_v Посмотреть сообщение
(cin >> exit).get();
1
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
21.12.2015, 00:13  [ТС] 13
Вот так сделал?
Нет, в первый раз заменял для n. Теперь практически все работает, но почему-то нет возможности выйти из цикла, т.е. при вводе Y, цикл все равно повторяется.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
21.12.2015, 00:19 14
Лучший ответ Сообщение было отмечено Marned как решение

Решение

В while() или (||) замени на и (&&).
0
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
21.12.2015, 00:20  [ТС] 15
Спасибо вам большое.
0
21.12.2015, 00:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2015, 00:20
Помогаю со студенческими работами здесь

Сравнение двух string
Почему код не работает? #include&lt;iostream&gt; using namespace std; struct test { string name;...

Сравнение двух string
Вот написала функцию для сравнения двух string (а именно численно) но нужно чтоб возвращала функцию...

сравнение строк (string)
код #include &lt;iostream&gt; int main (){ std::string my_str; while (my_str != &quot;y&quot; || my_str...

Сравнение двух List<string>
Есть два списка buf1, buf2 В buf1 содержатся символы 6 7 8 9 в buf2 содержатся символы


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

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