Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
sealpup
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 59
Завершенные тесты: 1
1

Вывод количества слов в set

17.04.2018, 23:57. Просмотров 879. Ответов 1
Метки нет (Все метки)

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

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
/*из текста из вопросительных, повествовательных и восклицательных предложений вывести только те слова, которые встречаются только в повествовательных предложениях, а также их количество*/
#include <algorithm> 
#include <fstream> 
#include <string> 
#include <set>  
#include<iterator> 
 
using namespace std;
 
ifstream in("input.txt");
ofstream out("output.txt");
 
int main()
{
    int k = 0;
    set <string> set_quest; 
    set <string> set_exc; 
    set <string> set_dot; 
    string text;
    string sub = "";
    getline(in, text);
    for (int i = 0; i < text.length(); i++)
    {
        k++;
        sub += text[i];
        if (text[i] == '?')
        {
            set_quest.insert(sub.substr(0, sub.size() - 1));
 
            sub = "";
            k = 0;
        }
        if (text[i] == '!')
        {
            set_exc.insert(sub.substr(0, sub.size() - 1));
            sub = "";
            k = 0;
        }
        if (text[i] == '.')
        {
            set_dot.insert(sub.substr(1, sub.size() - 1));
            sub = "";
            k = 0;
        }
    }
    
    for (set<string>::iterator it = set_dot.begin(); it != set_dot.end(); it++)
    { //здесь должен быть if (?)
        out << *it << " "; 
    }
 
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2018, 23:57
Ответы с готовыми решениями:

Ввод/вывод строки с подсчетом количества слов
Ввести строку, вывести ее на экран и посчитать кол-во слов в строке. Пожалуйста, нужно в скором...

Вывод предложений, состоящих из заданного количества слов
Добрый день всем) Помогите найти ошибку. Задача: Написать программу, которая считывает текст из...

Вывод на экран чётных слов строки исправить на вывод нечётных слов
#include&lt;conio.h&gt; #include&lt;iostream.h&gt; #include&lt;string.h&gt; #include&lt;stdio.h&gt; int i,l,j,k,p,n;...

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

Предложение состоит из некоторого количества слов. Заменить слова значениями длин слов, из которых оно состоит.
Предложение состоит из некоторого количества слов. Заменить слова значениями длин слов, из которых...

1
Fixer_84
1337 / 838 / 767
Регистрация: 30.04.2016
Сообщений: 2,801
09.05.2018, 20:09 2
Лучший ответ Сообщение было отмечено sealpup как решение

Решение

sealpup, здравствуйте! Написал для вас программу. Вот код:

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
#include <bits/stdc++.h> 
#include <windows.h>
 
    using namespace std;
 
int main() {
 
    setlocale(LC_ALL, "Russian"); //Чтобы функция isalpha() работала с русским текстом. 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    set<string> set;
    string s, str, tmp;
    char ch;
    int pos, xleft;
    while (fin.get(ch)) {
        str += ch;
    }
    str = ". " + str;
    for (int i = 2; i < str.size(); i++) {
        if (str[i] == '.') {
            pos = i;
            for (int j = pos - 1; j >= 0; j--) {
                if (str[j] == '.' || str[j] == '!' || str[j] == '?') {
                    xleft = j;
                    break;
                }
            }
            s = str.substr(xleft + 2, pos - xleft - 1);
            for (int i = 0; i < s.size(); i++) {
                tmp += s[i];
                if (!isalpha((unsigned char)s[i])) {
                    tmp.pop_back();
                    if (tmp != "") set.insert(tmp);
                    tmp = "";
                }
            }
        }
    }
    fout << "Target info:\n\n";
    int k = 0;
    for (auto it = set.begin(); it != set.end(); ++it) {
        k++;
        fout << k << ": " << *it << "\n";
    }
    fout << "\nTarget quantity: " << set.size() << "\n";
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2018, 20:09

set<vector<int> >, вывод елементов
Возможно глупый вопрос, но я как-то завис на этом. Как правильно вывести элементы из...

Вывод контейнера типа set <string> в файл
Конечный файл пустует, я всяко-разно пытался, вот мой вариант с итераторами. Смотрите...

STL: Сортировка слов по количеству согласных букв; вывод слов, встречающихся в списке более одного раза
Помогите написать программу!! Сортировка слов по количеству согласных букв; вывод слов,...


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

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

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