Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
rgn
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 2
#1

Список неповторяющихся слов из текста - C++

17.12.2013, 19:50. Просмотров 621. Ответов 6
Метки нет (Все метки)

Всем добрый вечер. Подскажите как написать программу, на входе которой текст, а на выходе список неповторяющихся слов из этого текста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2013, 19:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Список неповторяющихся слов из текста (C++):

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

В файле задан список слов; составить список слов, встречающихся в списке только один раз
.В файле задан список слов. Составить список слов, встречающихся в списке...

Сортировка и вывод строки из неповторяющихся слов в алфавитном порядке
Дана строка слов, разделенных пробелами. Сформируйте строку из неповторяющихся...

Создать список слов из файла и подсчитать количество повторения этих слов
Здравствуйте. Помогите написать такую программу: в файле храниться текст. Нужно...

Создать список из слов. Подсчитать количество слов, совпадающих с последним словом
создать список из слов. подсчитать количество слов, совпадающих с последним...

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

6
outoftime
║XLR8║
756 / 656 / 211
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
17.12.2013, 20:28 #2
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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <string>
#include <map>
#include <utility>
 
using namespace std;
 
int main()
{
    std::map<std::string, int> m;
    std::for_each(
        std::istream_iterator<std::string>(std::cin),
        std::istream_iterator<std::string>(), 
        [&m](const std::string &s) { ++m[s]; }
    );
    std::for_each(m.begin(), m.end(), [](const std::pair<std::string, int> &p) {
        if (p.second == 1) std::cout << p.first << " ";
    });
 
    return 0;
}
Больше ничего придумать не смог....
0
rgn
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 2
17.12.2013, 23:05  [ТС] #3
outoftime
Не запускается. И я, честно говоря, не смогла даже в этом коде разобраться.
0
outoftime
║XLR8║
756 / 656 / 211
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
18.12.2013, 08:07 #4
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <string>
#include <map>
#include <utility>
 
using namespace std;
 
int main()
{
    // структура хранящая слова и частоту их появления
    // смотрите std::map
    std::map<std::string, int> m;   
    // чтение входного потока, т.е. чтение слов
    // смотрите std::for_each, std::istream_iterator
    std::for_each(
        std::istream_iterator<std::string>(std::cin),
        std::istream_iterator<std::string>(), 
        // пробос переменной словаря в область видимости лямбды
        // смотрите лямбды в С++11
        [&m](const std::string &s) { 
            // увеличение счетчика, указывающего частоту
            // появления слова в строке
            ++m[s]; 
        }
    );
    // проход по всех елементах словаря
    // смотрите std::for_each
    std::for_each(
        m.begin(), 
        m.end(), 
        // так как словарь содержит элементы типа std::pair
        // тип получаемых значений будет соответсвующим
        // смотрите std::pair
        [](const std::pair<std::string, int> &p) {
            // если слово встречается 1 раз
            if (p.second == 1) 
                // выводим
                std::cout << p.first << " ";
        }
    );
 
    return 0;
}

Читайте документацию по описанным контейнерам и функциям с STL.

P.S. google\cyberforum faq в помощь.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
18.12.2013, 11:08 #5
Цитата Сообщение от rgn Посмотреть сообщение
на входе которой текст, а на выходе список неповторяющихся слов из этого текста.
Классическая реализация обеспечивается через std::set<std::string>.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <set>
#include <string>
#include <iterator>
#include <algorithm>
     
int main() {
 
    std::set<std::string> ss;
     
    std::copy( std::istream_iterator<std::string>(std::cin), std::istream_iterator<std::string>(), std::inserter( ss, ss.begin() ) );
     
    std::copy( ss.begin(), ss.end(), std::ostream_iterator<std::string>(std::cout, " ") );
     
    return 0;
}
http://ideone.com/92X7u2
1
InventoR
3 / 3 / 1
Регистрация: 26.10.2010
Сообщений: 41
19.01.2014, 18:58 #6
Маленький вопрос, по этому коду получается в файле в конце лишний пробел, а можно ли как-то изменить чтобы убрать пробел?
не охото обьявлять last, потом делать ему дикремент и в конце добивать.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
19.01.2014, 20:42 #7
InventoR, если нужно убрать ненавистный пробел, самый простой вариант заменить
C++
1
std::copy( ss.begin(), ss.end(), std::ostream_iterator<std::string>(std::cout, " ") );
на нечто подобное:
C++
1
2
3
4
5
6
if( ss.begin() != ss.end() )
{
   auto it = std::prev(ss.end());
   std::copy( ss.begin(), it, std::ostream_iterator<std::string>(std::cout, " ") );
   std::cout << *it << std::endl;
}
1
19.01.2014, 20:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 20:42
Привет! Вот еще темы с решениями:

Стек: создать список из слов, подсчитать количество слов, совпадающих с последним словом
Создать список из слов. подсчитать количество слов, совпадающих с последним...

Дан список слов различной длины. Составить программу упорядочения списка слов: По их длине; По алфавиту
Очень срочно!!!!! Дан список слов различной длины. Составить программу...

Дан список слов. Найти наиболее длинную последовательность слов, чтобы конец предыдущего совпадал с началом следующего
Дан список слов. Найти наиболее длинную последовательность слов, чтобы конец...

Заданы два текста. Определить, можно ли получить первый текст перестановкой слов второго текста.
Заданы два текста. Определить, можно ли получить первый текст перестановкой...


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

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

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