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

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

18.08.2022, 22:09. Показов 1587. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Прошу помощи. Задача: Вывести слова, которые встречаются в каждом из двух предложений, введенных с клавиатуры.

После цикла сохраняются только последние слова предложений. Помогите, пожалуйста, исправить.

Кликните здесь для просмотра всего текста
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
38
39
int main ()
{
int n=80, m=80, x=80, y=80, z=80;
char str_1[n];
char str_2[m];
char dictionary_1[y];
char dictionary_2[z];
int tmp;
 
cout << "Введите первое предложение" << endl;
cin.getline(str_1,n);
cout << "Введите второе предложение" << endl;
cin.getline(str_2,m);
char *pch1 = strtok(str_1," ,;: .!?");
 
 
while (pch1 != NULL)
  {
 
   strcpy(dictionary_1,pch1);
   dictionary_1[y++];
   pch1 = strtok(NULL," ,;: .!?");
  }
 
char *pch2 = strtok(str_2," ,;: .!?");
while (pch2 != NULL)
   {
   strcpy(dictionary_2,pch2);
   dictionary_2[z++];
   pch2 = strtok(NULL," ,;: .!?");
   
   }
cout << dictionary_1;
cout << dictionary_2;
tmp = strcmp (dictionary_1,dictionary_2);
if (tmp == 0)
    cout << dictionary_1;
else
     cout << "Нет совпадений" << endl;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.08.2022, 22:09
Ответы с готовыми решениями:

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

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

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

22
404 / 261 / 168
Регистрация: 13.01.2021
Сообщений: 1,162
18.08.2022, 22:42
Alllgator343,
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
38
39
40
41
42
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
using namespace std;
string punctuation(string word){
    string temp = "";
    for(int i = 0; i < word.length(); ++i){
        if(word[i] != '.' && word[i] != '!' && word[i] != ',' && word[i] != '?' && word[i] != ':' && word[i] != ';')
        temp += word[i];
    }
    return temp;
}
int main()
{
    vector<string> first, second;
    string textfirst, textsecond, word;
    cout << "Введите первое предложение: ";
    getline(cin, textfirst);
    cout << "Введите второе предложение: ";
    getline(cin, textsecond);
    stringstream fs(textfirst);
    stringstream ss(textsecond);
    while(fs >> word){
        first.push_back(punctuation(word));
    }
    while(ss >> word){
        second.push_back(punctuation(word));
    }
    cout << "Слова схожие: ";
    for(vector<string>::iterator i = first.begin(); i != first.end(); ++i){
        bool flag = false;
        for(vector<string>::iterator j = second.begin(); j != second.end(); ++j){
            if(*i == *j)
            flag = true;
        }
        if(flag){
            cout << *i << " ";
        }
    }
}
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
18.08.2022, 23:10
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
#include <sstream>
 
int main(){
    std::string s1 = "forum 123 456 234 321",s2= "123 321 forum 234 123",t;
    std::stringstream a;
 
    a << s1;
    while (a>>t) 
        if (s2.find(t,0) != std::string::npos) std::cout << t << '\n';      
}
0
Заблокирован
18.08.2022, 23:26
повар1, могут быть повторы.
плюс как на счет
C++
1
    std::string s1 = "i am diatel for",s2= "mine forge",t;
найдет не слова, а совпадающие подстроки
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
18.08.2022, 23:38
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
38
39
40
41
42
43
44
45
46
47
48
#include <iostream> 
#include <set> 
#include <string> 
#include <algorithm> 
#include <sstream> 
#include <iterator>
 
int main()
{
    std::set<std::string> set1, set2, intersect;
    std::string str1, str2;
 
    std::cout << "Введите первое предложение" << std::endl;
    std::getline(std::cin, str1);
    std::cout << "Введите второе предложение" << std::endl;
    std::getline(std::cin, str2);
 
    std::replace_if(str1.begin(), str1.end(), ispunct, ' ');
    std::replace_if(str2.begin(), str2.end(), ispunct, ' ');
 
    std::stringstream ss(str1);
    
    std::copy(std::istream_iterator<std::string>(ss),
        std::istream_iterator<std::string>(),
        std::inserter(set1, set1.end()));
 
    ss = std::stringstream(str2);
 
    std::copy(std::istream_iterator<std::string>(ss),
        std::istream_iterator<std::string>(),
        std::inserter(set2, set2.end()));
 
    set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(),
        std::inserter(intersect, intersect.begin()));
 
 
    if(intersect.empty())
    std::cout << "Нет совпадений" << std::endl;
    else
    {
        for (const std::string& s : intersect)
        {
            std::cout << s << " ";
        }
        std::cout << std::endl;
    }
    return 0;
}
1
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,870
19.08.2022, 01:56
Вот так можно.? Сам написал. Ни где не спёр.

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
#include <iostream>
#include <string>
#include <vector>
       #include <algorithm>
 
#pragma warning(disable : 4996)
using namespace std;
#define DELIM " .,?!-:;"
 
int _tmain(int argc, _TCHAR* argv[])
{
    vector<string> first, second;
    string textfirst, textsecond;
    cout << "enter the first line: ";
    getline(cin, textfirst);
    cout << "enter the second line: ";
    getline(cin, textsecond);
    char *p;                 // Набиваю один вектор
for (p = strtok((char*)textfirst.c_str(), DELIM); p != NULL; p = strtok(NULL, DELIM))
        first.push_back(p);
sort(first.begin(), first.end());// Удаляю дубликаты
first.erase(unique(first.begin(), first.end()), first.end());
                              // Набиваю второй вектор
for (p = strtok((char*)textsecond.c_str(), DELIM); p != NULL; p = strtok(NULL, DELIM))
        second.push_back(p);
sort(second.begin(), second.end());// Удаляю дубликаты
second.erase(unique(second.begin(), second.end()), second.end());
                                   // В первый добавляю второй и сортирую
for (unsigned i = 0; i < second.size(); ++i) first.push_back(second[i]);
sort(first.begin(), first.end());
 
for (unsigned i = 0; i < first.size()-1; ++i)// Вывожу дубликаты
if (first[i] == first[i + 1])cout << "the same words --->: " << first[i]<< endl;
    
cin.get(); cin.get();
    return 0;
}
0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
19.08.2022, 11:30  [ТС]
Весьма для меня сложные варианты накидали. У нас есть лекции, прикрепил в сообщении ниже, используя функции со строками нужно решить данную задачу.

Скажите, пожалуйста, я хоть правильным путем делаю? У меня сейчас проблема в том, что в dictionary, сохраняется только последнее слово в предложении. Понимаю, что из-за цикла первые слова перезаписываются, я не могу понять как мне сделать так, чтобы все слова сохранялись? План такой, сохранить лексемы из предложения в массивах dictionary_1 и dictionary_2, а затем, с помощью strcmp, их сравнить.
C++
1
2
3
4
5
tmp = strcmp (dictionary_1,dictionary_2);
if (tmp == 0)
    cout << dictionary_1;
else
     cout << "Нет совпадений" << endl;
0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
19.08.2022, 11:30  [ТС]
Приложение к сообщению выше
Вложения
Тип файла: pdf Тема 8 Строки и функции для работы с ними.pdf (121.7 Кб, 8 просмотров)
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
19.08.2022, 11:39
Цитата Сообщение от Alllgator343 Посмотреть сообщение
У меня сейчас проблема в том, что в dictionary, сохраняется только последнее слово в предложении
это одно слово:
C++
1
char dictionary_1[y];
а вам нужен массив слов:
C++
1
char words[100][100];
1
19.08.2022, 11:41

Не по теме:

На сколько некоторые задачи решаются легче, при помощи другого ЯП

Python
1
print(*(set(input().split()) & set(input().split())))
Code
1
2
3
4
5
6
aaa bbb ccc
ggg eee bbb ccc sss
bbb ccc
 
** Process exited - Return Code: 0 **
Press Enter to exit terminal

0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
19.08.2022, 11:45  [ТС]
js_advent но это же массив, я для него выделил 80 символов.
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
19.08.2022, 11:46
Цитата Сообщение от Alllgator343 Посмотреть сообщение
но это же массив, я для него выделил 80 символов.
ну да, как раз на одно слово
1
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,870
19.08.2022, 12:24
Функцией оформляем. Вообще красиво.

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
using namespace std;
#define DELIM " .,?!-:;"
 
void m_push(string one_two, vector<string> &first_next){
    char *p;                 // Набиваю вектор
    for (p = strtok((char*)one_two.c_str(), DELIM); p != NULL; p = strtok(NULL, DELIM))
        first_next.push_back(p);
    sort(first_next.begin(), first_next.end());// Удаляю дубликаты
    first_next.erase(unique(first_next.begin(), first_next.end()), first_next.end());
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    vector<string> first, second;
    string textfirst, textsecond;
    cout << "enter the first line: ";
    getline(cin, textfirst);
    cout << "enter the second line: ";
    getline(cin, textsecond);
    m_push(textfirst, first); m_push(textsecond, second);
                               // В первый добавляю второй и сортирую
    for (unsigned i = 0; i < second.size(); ++i) first.push_back(second[i]);
    sort(first.begin(), first.end());
for (unsigned i = 0; i < first.size() - 1; ++i)// Вывожу дубликаты
    if (first[i] == first[i + 1])cout << "the same words --->: " << first[i] << endl;
cin.get(); cin.get();
    return 0;
}
Добавлено через 22 минуты
Alllgator343,
Вы хотите на си это написать?
strcpy(dictionary_2,pch2); -- Эти функции имеют различные ньюансы с нультерминаторами
и вообще этих функций их довольно много. (safe/ unsafe)
Внимательнее надо про неё читать, или опытным путём.
А лучше не связываться.
https://social.msdn.microsoft.... vclanguage
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
19.08.2022, 12:24
Цитата Сообщение от Alllgator343 Посмотреть сообщение
используя функции со строками нужно решить данную задачу.
от вас ждали что-нибудь такое:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream> 
#include <cstring> 
 
bool contains(const char words[][100], size_t num, const char word[])
{
    for (size_t i = 0; i < num; i++)
    {
        if (strcmp(words[i], word) == 0)
        {
            return true;
        }
    }
    return false;
}
 
int main()
{
    char str1[256];
    char str2[256];
    char words1[32][100];
    char words2[32][100];
    char words3[32][100];
    size_t numWords1 = 0; // кол-во слов в первом предложении
    size_t numWords2 = 0; // кол-во слов во втором предложении
    size_t numWords3 = 0; // кол-во совпадений
 
    std::cout << "Введите первое предложение" << std::endl;
    std::cin.getline(str1, 100);
    std::cout << "Введите второе предложение" << std::endl;
    std::cin.getline(str2, 100);
 
    char* pch1 = strtok(str1, " ,;:.!?");
    while (pch1 != NULL)
    {
        strcpy(words1[numWords1], pch1);
        numWords1++;
        pch1 = strtok(NULL, " ,;:.!?");
    }
 
    char* pch2 = strtok(str2, " ,;:.!?");
    while (pch2 != NULL)
    {
        strcpy(words2[numWords2], pch2);
        numWords2++;
        pch2 = strtok(NULL, " ,;:.!?");
    }
 
    for (size_t i = 0; i < numWords1; i++)
    {
        if (contains(words2, numWords2, words1[i])
            && !contains(words3, numWords3, words1[i]))
        {
            strcpy(words3[numWords3], words1[i]);
            numWords3++;
        }
    }
 
    if (numWords3 == 0)
        std::cout << "Нет совпадений" << std::endl;
    else
    {
        for (size_t i = 0; i < numWords3; i++)
        {
            std::cout << words3[i] << " ";
        }
        std::cout << std::endl;
    }
}
1
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,870
19.08.2022, 12:42
C++
1
2
3
4
5
tmp = strcmp (dictionary_1,dictionary_2);
if (tmp == 0)
    cout << dictionary_1;
else
     cout << "Нет совпадений" << endl;
Вы хотите сравнить эти две строки на индентичность?

Добавлено через 3 минуты
js_advent,
Это жуткая смесь си и плюсов.
Ветка здесь плюсов...

Добавлено через 37 секунд
Зачем это делать на си строках?

Добавлено через 8 минут
Нет локали. выводит кракозябрами.
В конце функции майн надо ставить return 0; (она у вас int)
А вообще вроде работает.
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
19.08.2022, 12:43
Цитата Сообщение от Наталья8 Посмотреть сообщение
js_advent,
Это жуткая смесь си и плюсов.
ну если откровенно ваш код тоже на плюсы не тянет)
Цитата Сообщение от Наталья8 Посмотреть сообщение
Зачем это делать на си строках?
уже два варианта скинул. выбирайте какой хотите или свой пишите. свобода.
0
19.08.2022, 12:50

Не по теме:

Молодец. Памятник при жизни....

0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
19.08.2022, 12:59  [ТС]
Наталья8 да, две строки нужно сравнить. На с++ делаю.

Сейчас буду разбираться, что мне ответили.
0
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,870
19.08.2022, 13:18
Alllgator343,
Ты точно уверен, что это с++???
js - скрипт...
0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
21.08.2022, 16:28  [ТС]
js_advent подскажите, выводе текста на русском кракозябры. При вводе весь текст отображается нормально, при выводе латиницы тоже. В программу добавил строчку "setlocale(LC_CTYPE, "rus");", не помогло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2022, 16:28
Помогаю со студенческими работами здесь

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

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

Напечатать те слова, которые встречаются в каждом из двух заданных предложений
Никак не получается написать программу. &quot;Напечатать те слова, которые встречаются в каждом из двух заданных предложений&quot; ...

Напечатать те слова, которые встречаются в каждом из двух заданных предложений
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;locale&gt; using namespace std; int main() { char *tempSlova1 = new...

Напечатать те слова, которые встречаются в каждом из двух заданных предложений.
Напечатать те слова, которые встречаются в каждом из двух заданных предложений. Помогите пожалуйста)


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru