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

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

21.04.2020, 14:57. Показов 1065. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Используя контейнеры и алгоритмы стандартной библиотеки шаблонов, решить следующие задачи (использовать только алгоритмы стандартной библиотеки шаблонов):
Дан текст, состоящий из предложений, разделённых знаками препинания из набора «.?!». Предложения в свою очередь состоят из слов, отделенных друг от друга пробелами. Найти слова (без учёта регистра) и их количество, которые встречаются одновременно и в повествовательных, и в восклицательных предложениях.
Текст вводится с клавиатуры!
На C++.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2020, 14:57
Ответы с готовыми решениями:

Найти слова, которые встречаются одновременно и в вопросительных и в восклицательных предложениях
Дан текст, состоящий из предложений, разделённых знаками препинания из набора «.?!». Предложения в свою очередь состоят из слов, отделённых...

Найти слова, встречающиеся и в повествовательных, и в восклицательных предложениях
Дан текст, состоящий из предложений, разделенных знаками препинания из набора «.?!». Предложения в свою очередь состоят из слов, отделенных...

Найти слова, встречающиеся и в вопросительных, и в восклицательных предложениях, но не в повествовательных
Условие: дан текст, состоящий из предложений, разделённых знаками препинания из набора «.?!». Предложения в свою очередь состоят из слов,...

7
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,840
Записей в блоге: 3
23.04.2020, 10:19
abcdifg,
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
///----------------------------------------------------------------------------|
/// Найти слова (без учёта регистра) и их количество,
/// которые встречаются одновременно и в повествовательных, 
/// и в восклицательных предложениях
///----------------------------------------------------------------------------:
 
#include <functional>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <cstdlib>
#include <sstream>
#include <string>
#include <list>
#include <set>
 
typedef std::string S;
 
///----------------------------------------------------------------------------|
/// Старт.
///----------------------------------------------------------------------------:
int main()
{   setlocale(0, "");
 
    S text; text = text
        + "111 ЛУНА xxx, мяч . "
        + "333 луна мяч луна? "
        + "444 луна луна луна . "
        + "555 луна луна мЯч мяч мяч луна? "
        + "666 луна луна мяч Xxx! ";
    
    std::istringstream iss(text);
    std::list<S> src( (std::istream_iterator<S>(iss)), std::istream_iterator<S>() );
    
    std::ostream_iterator<S> out_(std::cout, " ");
    std::copy(src.begin(), src.end(), out_);
    
    std::set<S> d1, d2;
    char c = 0;
    
    for_each(src.rbegin(), src.rend(),
        [&d1, &d2, &c](S& e)
        {   std::transform(e.begin(), e.end(), e.begin(), tolower);
            
            if( e.back() == '.' || e.back() == '!' || e.back() == '?')
            {   c = e.back();
                e.resize(e.size() - 1);
            }
            else if(e.back() == ',')
            {   e.resize(e.size() - 1);
            }
            
                 if(c == '.') d1.insert(e);
            else if(c == '!') d2.insert(e);
        }
    );
    
    std::cout << "\n\nd1(.)-----------------уникальные слова в повестовании:\n";
    std::copy(d1.begin(), d1.end(), out_);
    
    std::cout << "\n\nd2(!)-----------------уникальные слова в восклицаниях:\n";
    std::copy(d2.begin(), d2.end(), out_);
    
    std::list<S> res;
    int cnt = std::count_if(d1.begin(), d1.end(),
        [&d2, &res] (S s)
        {   if(std::find(d2.begin(), d2.end(), s) != d2.end())
            {   res.push_back(s);
                return true;
            }   return false;
        }
    );
    
    std::cout << "\n\nКол-во разных слов встречающихся"
              << " и в повествов. и в воскл..\n"
              << "cnt = " << cnt << "\n";
              
    std::cout << "\nВот эти слова:\n";
    std::copy(res.begin(), res.end(), out_);
    
    return 0;
}
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.04.2020, 14:37
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
using namespace std;
 
int main()
{
    string source;
    //getline(cin, source); //.то - сами)
    //тестовая строка
    source="\
Who knows of strings the member functions there,\
 heh?\
I ask the day light and the dark of night,\
 huh.\
And what a crazy fate for us prepares,\
 heh?\
When no one now applies the method right,\
 huh!\
                 sonnet the number 131313 IGPIGP,\
                  huh.\
    ";
 
int start=0, finish=0;
const char* finishes(".!?");
vector<string> special_strings ; //finished by ! or .
while(start != string::npos)
{
    finish=source.find_first_of(finishes, start);
    if(finish==string::npos)break;
    if(source[finish]=='?'){start=finish+1; continue;}
    special_strings.emplace_back(source.substr(start, finish-start)) ;
    start=finish+1;
}
 
for(const auto& str:special_strings )cout<<str<<endl;
 
vector<set<string>> vs;
for(const auto& str:special_strings )
{
    start=0, finish=start ;
    vs.emplace_back(set<string>());
 
    while(finish != string::npos)
    {
        finish=str.find_first_of(' ', start);
        vs.back().insert(str.substr(start, finish-start));
        start=finish+1;
    }
}
 
for(const auto& sset:vs )
{
    cout<<"\nset\n";
  for(const auto& str:sset ) cout<<str<<endl;
}
 
set<string> candidate1, candidate2,  result;
if(vs.size()){
size_t flagStart(1);
for(auto& sset:vs )
    {
        if(flagStart)
        {
            copy(sset.begin(), sset.end(), inserter(candidate1, candidate1.begin())) ;
 
            flagStart=0;
            continue;
        }
         copy(sset.begin(), sset.end(), inserter(candidate2, candidate2.begin())) ;
 
        std::set_intersection
            (
                candidate1.begin(), candidate1.end()
                ,candidate2.begin(), candidate2.end()
                ,inserter(result, result.begin())
            );
        copy(result.begin(), result.end(),inserter(candidate1, candidate1.begin())) ;
    }
}
cout<<"\n\nFound:\n";
for(auto& str:result ) cout<<str<<endl;
return 0;
}
Я не стал убирать отладочный вывод, - вдруг что-то не поймёте)
0
-8 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 47
27.04.2020, 10:18  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
///----------------------------------------------------------------------------|
/// Найти слова (без учёта регистра) и их количество,
/// которые встречаются одновременно и в повествовательных,
/// и в восклицательных предложениях
///----------------------------------------------------------------------------:
#include <functional>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <cstdlib>
#include <sstream>
#include <string>
#include <list>
#include <set>
typedef std::string S;
///----------------------------------------------------------------------------|
/// Старт.
///----------------------------------------------------------------------------:
int main()
{   setlocale(0, "");
S text; text = text
        + "111 ЛУНА xxx, мяч . "
        + "333 луна мяч луна? "
        + "444 луна луна луна . "
        + "555 луна луна мЯч мяч мяч луна? "
        + "666 луна луна мяч Xxx! ";
std::istringstream iss(text);
    std::list<S> src( (std::istream_iterator<S>(iss)), std::istream_iterator<S>() );
std::ostream_iterator<S> out_(std::cout, " ");
    std::copy(src.begin(), src.end(), out_);
std::set<S> d1, d2;
    char c = 0;
for_each(src.rbegin(), src.rend(),
        [&d1, &d2, &c](S& e)
        {   std::transform(e.begin(), e.end(), e.begin(), tolower);
if( e.back() == '.' || e.back() == '!' || e.back() == '?')
            {   c = e.back();
                e.resize(e.size() - 1);
            }
            else if(e.back() == ',')
            {   e.resize(e.size() - 1);
            }
if(c == '.') d1.insert(e);
            else if(c == '!') d2.insert(e);
        }
    );
std::cout << "\n\nd1(.)-----------------уникальные слова в повестовании:\n";
    std::copy(d1.begin(), d1.end(), out_);
std::cout << "\n\nd2(!)-----------------уникальные слова в восклицаниях:\n";
    std::copy(d2.begin(), d2.end(), out_);
std::list<S> res;
    int cnt = std::count_if(d1.begin(), d1.end(),
        [&d2, &res] (S s)
        {   if(std::find(d2.begin(), d2.end(), s) != d2.end())
            {   res.push_back(s);
                return true;
            }   return false;
        }
    );
std::cout << "\n\nКол-во разных слов встречающихся"
              << " и в повествов. и в воскл..\n"
              << "cnt = " << cnt << "\n";
std::cout << "\nВот эти слова:\n";
    std::copy(res.begin(), res.end(), out_);
return 0;
}
А как сделать так, что бы текст можно было вводить с клавиатуры?
0
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,840
Записей в блоге: 3
27.04.2020, 10:32
Цитата Сообщение от abcdifg Посмотреть сообщение
А как
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
///----------------------------------------------------------------------------|
/// Найти слова (без учёта регистра) и их количество,
/// которые встречаются одновременно и в повествовательных, 
/// и в восклицательных предложениях
///----------------------------------------------------------------------------:
 
#include <functional>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <cstdlib>
#include <sstream>
#include <string>
#include <list>
#include <set>
 
#include <windows.h>
 
typedef std::string S;
 
///----------------------------------------------------------------------------|
/// Старт.
///----------------------------------------------------------------------------:
int main()
{   //setlocale(0, "");
    SetConsoleCP      (1251);
    SetConsoleOutputCP(1251);
 
    S text; text = text
        + "111 ЛУНА xxx, мяч . "
        + "333 луна мяч луна? "
        + "444 луна луна луна . "
        + "555 луна луна мЯч мяч мяч луна? "
        + "666 луна луна мяч Xxx! ";
    
    getline(std::cin, text);
    
    std::istringstream iss(text);
    std::list<S> src( (std::istream_iterator<S>(iss)), std::istream_iterator<S>() );
    
    std::ostream_iterator<S> out_(std::cout, " ");
    std::copy(src.begin(), src.end(), out_);
    
    std::set<S> d1, d2;
    char c = 0;
    
    for_each(src.rbegin(), src.rend(),
        [&d1, &d2, &c](S& e)
        {   std::transform(e.begin(), e.end(), e.begin(), tolower);
            
            if( e.back() == '.' || e.back() == '!' || e.back() == '?')
            {   c = e.back();
                e.resize(e.size() - 1);
            }
            else if(e.back() == ',')
            {   e.resize(e.size() - 1);
            }
            
                 if(c == '.') d1.insert(e);
            else if(c == '!') d2.insert(e);
        }
    );
    
    std::cout << "\n\nd1(.)-----------------уникальные слова в повестовании:\n";
    std::copy(d1.begin(), d1.end(), out_);
    
    std::cout << "\n\nd2(!)-----------------уникальные слова в восклицаниях:\n";
    std::copy(d2.begin(), d2.end(), out_);
    
    std::list<S> res;
    int cnt = std::count_if(d1.begin(), d1.end(),
        [&d2, &res] (S s)
        {   if(std::find(d2.begin(), d2.end(), s) != d2.end())
            {   res.push_back(s);
                return true;
            }   return false;
        }
    );
    
    std::cout << "\n\nКол-во разных слов встречающихся"
              << " и в повествов. и в воскл..\n"
              << "cnt = " << cnt << "\n";
              
    std::cout << "\nВот эти слова:\n";
    std::copy(res.begin(), res.end(), out_);
    
    return 0;
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.04.2020, 10:32
abcdifg, скопировать страницу без тегов на сайт - даже в пальцах нервной ткани не требует. А прочесть 2-3 строки вначале предложенного реiения:
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
2
3
4
5
6
int main()
{
 string source;
 //getline(cin, source); //.то - сами)
 //тестовая строка
 source="\
перенести комент и
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
 string source;
getline(cin, source); //.то - сами)
 //тестовая строка
/*
 source="\
 
  huh.\
    ";
*/
??
Я показал тестовый вариант, чтобы он не зависел от пальцев. Дальше вы сами. Для примера от XLAT, тоже легко это применить.
0
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,840
Записей в блоге: 3
27.04.2020, 10:32
del
0
27.04.2020, 10:34

Не по теме:

XLAT, такого глюка ещё не было на моей памяти)

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2020, 10:34
Помогаю со студенческими работами здесь

Найти слова, которые встречаются одновременно и в повествовательных, и в вопросительных предложениях
Дан текст, состоящий из предложений, разделённых знаками препинания из набора «.?!». Предложения в свою очередь состоят из слов, отделённых...

Используя set найти слова встречающиеся одновременно в вопросительных и восклицательных предложениях
Дан текст, состоящий из предложений, разделённых знаками препинания из набора «.?!». Предложения в свою очередь состоят из слов, отделённых...

Напечатать слова, которые встречаются в предложениях только 1 раз
Ребята! Такая задача - Даны 2 предложения.Напечатать слова, которые встречаются в предложениях только 1 раз Задачу нужно...

Вывести слова и их количество в повествовательных предложениях
Согласно задаче, дан текст, состоящий из вопросительных, повествовательных и восклицательных предложений. Нужно вывести в output такие...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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