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

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне необходимо сравнить два экземпляра класса 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.12.2015, 22:06
Ответы с готовыми решениями:

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

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

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

14
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
20.12.2015, 22:45
Цитата Сообщение от Marned Посмотреть сообщение
cin >>
считывает строку до появления первого пробела, поэтому одно введенное слово корректно обрабатывается а несколько слов - нет
1
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 22:50  [ТС]
Можете ли тогда подсказать как можно сравнивать более одного слова? Со string раньше не работал, вот решил попробовать и выявил такую проблему.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
20.12.2015, 22:55
как вариант, использовать gets она считывает все, введенное с клавиатуры
1
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 23:20  [ТС]
Да, спасибо, с этим разобрался, использовал getline. Но теперь срабатывает лишь один раз, затем нет возможности выйти из цикла и ввести новое слово.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
20.12.2015, 23:22
оно показывает результат. спрашивает,хотите ли продолжить и виснет?
1
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 23:42  [ТС]
В первый раз происходит нормальное срабатывание, в конце предлагается выход из цикла, независимо от того какой символ был введен для exit, программа повторяется, но вместо переменной n вводится пустое значение.
0
505 / 317 / 236
Регистрация: 18.02.2013
Сообщений: 754
20.12.2015, 23:44
так очень сложно что-либо говорить, не видя листинг
0
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
20.12.2015, 23:46  [ТС]
Здесь еще отлавливал 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
Цитата Сообщение от 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  [ТС]
Если перед getline(), что-то вводится с помощью cin >>, то, перед getline(), нужно убрать '\n' из потока. Например, делать ввод так (можно всегда так, а не только перед getline()):
Перед getline() ничего не вводилось, был только вывод слов из массива string. Тем не менее заменил на способ предложенный вами, и проблему это не решило.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
21.12.2015, 00:04
Цитата Сообщение от 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  [ТС]
Вот так сделал?
Нет, в первый раз заменял для n. Теперь практически все работает, но почему-то нет возможности выйти из цикла, т.е. при вводе Y, цикл все равно повторяется.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
21.12.2015, 00:19
Лучший ответ Сообщение было отмечено Marned как решение

Решение

В while() или (||) замени на и (&&).
0
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 12
21.12.2015, 00:20  [ТС]
Спасибо вам большое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.12.2015, 00:20
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru