Форум программистов, компьютерный форум CyberForum.ru

Составить частотный словарь вводимого текста - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
STRAG 92
0 / 0 / 0
Регистрация: 23.10.2010
Сообщений: 59
18.11.2011, 08:35     Составить частотный словарь вводимого текста #1
Составить частотный словарь вводимого текста (несколько строк) тоесть распечатать строку следующим образом: справа от каждого слова-частоту, с которой оно встретилось.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
18.11.2011, 10:00     Составить частотный словарь вводимого текста #2
Используем
C++
1
std::map < std::string, int >
Выделяем слово из строки, и кладем в карту, увеличивая счетчик количества
C++
1
m [ word ]++;
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.11.2011, 10:06     Составить частотный словарь вводимого текста #3
Можно написать красивый алгоритм с использованием дерева поиска. В итоге выводится на экран частотный словарь всех слов в лексикографическом порядке.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.11.2011, 10:28     Составить частотный словарь вводимого текста #4
Thinker, предложенный вариант также даёт частотный словарь всех слов в лексикографическом порядке))
Вот, кстати, полный код:
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <map>
 
int main()
{
    std::string text;
    std::string str;
 
    std::ifstream fin("input.txt");
 
    while (std::getline(fin, str))
        text += ' ' + str;
 
    fin.close();
 
    std::istringstream istr(text);
 
    std::map< std::string, size_t > freq_dict;
    std::string word;
 
    while (istr >> word)
        ++freq_dict[word];
 
    for (std::map< std::string, size_t >::const_iterator it = freq_dict.begin();
         it != freq_dict.end();
         ++it)
         std::cout << it->first << " : " << it->second << std::endl;
 
    return 0;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.11.2011, 10:46     Составить частотный словарь вводимого текста #5
silent_1991, это я понял, надо было уточнить, что речь шла о реализации в Си, ибо очень нравится не пользоваться готовыми классами, а прописывать все ручками, если есть на это время, полезно очень)

Тем более, ТС не уточнил какой язык ему нужен, а делается это заранее.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.11.2011, 10:51     Составить частотный словарь вводимого текста #6
Цитата Сообщение от Thinker Посмотреть сообщение
Тем более, ТС не уточнил какой язык ему нужен
Ну это уже его проблемы.

Цитата Сообщение от Thinker Посмотреть сообщение
очень нравится не пользоваться готовыми классами, а прописывать все ручками
Я в своё время столько этих велосипедов написал, что теперь как-то не тянет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2011, 11:05     Составить частотный словарь вводимого текста
Еще ссылки по теме:

C++ Частотный анализ текста
C++ Частотный словарь из слов текстового файла в виде дерева двоичного поиска
Алфавитно-частотный словарь на основе односвязного списка с применением токенов C++

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.11.2011, 11:05     Составить частотный словарь вводимого текста #7
Да, но иногда бывает так, что при написании вроде бы знакомого и стандартного алгоритма понимаешь, что можно вот такой то кусок применить совсем в другой задаче, а этот вообще оптимизировать и получается нечто интересное вообще у меня порой мания свести сложность алгоритма к минимуму, как, например, здесь
http://www.cyberforum.ru/showthread.php?p=2067150
А здесь, например, это удалось сделать:
http://www.cyberforum.ru/showthread.php?p=2132969
А ведь свести алгоритм к минимальной сложности не всегда очень просто, даже наоборот, порой очень сложно.
Yandex
Объявления
18.11.2011, 11:05     Составить частотный словарь вводимого текста
Ответ Создать тему
Опции темы

Текущее время: 20:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru