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

Программа анализа текста - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ООП. Классы, наследование, векторы http://www.cyberforum.ru/cpp-beginners/thread590248.html
Никак не пойму как реализовать наследование допустим есть базовый класс животных там различные функции class Beast { public: void Start_Beast(); void Spawn_Beast(); void Draw_Beast(); void Average_Life_Beast(); void Move_Beast(); void Dead_Beast();
C++ Замена слов в строке Можно ли как-то в строке например я хочу много делать много делать2 много делать3 Заменить все слова "много", как это сделать ? http://www.cyberforum.ru/cpp-beginners/thread590245.html
результатом вычисления фрагмента не является функция, принимающая 1 аргументов C++
проверьте пожалуйста ошибку выдает!!!( #include <iostream> #include <conio.h> #include <cmath> using namespace std; int main() { double S=0, SO=1,x=0.3; float eps=0.001;
C++ Создать двоичный файл
Необходимо написать и отладить две программы.Первая программа должна сформировать двоичный файл. Вторая – считать данные из этого файла, выполнить соответствующие вычисления (при этом ис- пользуемые массивы должны быть динамическими) и записать их результаты в текстовый файл. Задание: Создать двоичный файл и записать в него n целых чисел. Из исходного файла сфор- мировать массив, записав в...
C++ Структуры http://www.cyberforum.ru/cpp-beginners/thread590233.html
Подскажите плиз. Я написала программу, которая создает текстовый док-т. а теперь мне надо обратится к этой структуре и взять из нее элемент для сравнения(наверно ответы должны быть типа int, но у меня с ним не работает). В итоге должно получится что-то типо теста. на экран выводится вопрос, человек отвечает, а потом его ответ сравнивается с одним из элементов структуры. если можно ты мне бы...
C++ Сочетание из n по k Здравствуйте. У меня дан массив объектов класса, мне надо написать функцию, которая перебирает все возможные варианты сочетаний этих элементов. В функцию должны передаваться сам массив и число K(по сколько элементов в каждом сочетании) Вот нашел такую функцию, но она просто перебирает элементы от 1 до n и сразу их выводит, никуда не записывая. Что можно здесь изменить для решения моей задачи?... подробнее

Показать сообщение отдельно
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
29.05.2012, 21:05     Программа анализа текста
Под катом работающая прога. Кому интересно решить самому - не смотрите

Работающее решение
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
 
/*
 * представляет пару "слово - количество"
 */
struct word_t
{
    std::string word; // слово
    size_t count;     // количество
 
    // к-р по-умолч.
    word_t() :
        word(),
        count()
    {
    }
 
    // к-р копирования
    word_t( const word_t &other ) :
        word( other.word ),
        count( other.count )
    {
    }
 
    // к-р из строки и числа
    // по-умолчанию считается, что слово встречается 1 раз
    word_t( const std::string &str, const size_t &count = 1 ) :
        word( str ),
        count( count )
    {
    }
 
    // для std::find
    bool operator==( const std::string &other ) const
    {
        return word == other;
    }
 
    // для std::sort
    bool operator<( const word_t &other ) const
    {
        return count < other.count;
    }
};
 
/*
 *  для вывода
 */
std::ostream & operator<<( std::ostream &os, const word_t &word )
{
    return os << word.word << ": " << word.count;
}
 
 
int main( )
{
    std::ofstream fout( "out.txt" );
 
    if( !fout.good() )
    {
        perror( "out.txt" );
        return 1;
    }
 
    std::ifstream fin( "in.txt" );
 
    if( !fin.good() )
    {
        perror( "in.txt" );
        return 1;
    }
 
    // список слов
    typedef std::vector<word_t> words_count_t;
    words_count_t words_count;
 
    // обходим каждое слово в потоке
    std::for_each( std::istream_iterator<std::string> ( fin ),
                   std::istream_iterator<std::string> (),
                   [&]( const std::string &str )
                   {
                       std::string word; // слово без знаков препинания
 
                       // копируем слово по буквам без знаков препинания
                       std::copy(
                              // ищем первую букву с начала слова
                              std::find_if( str.begin(), str.end(), []( const char &ch ){ return isalpha( ch ); } ),
 
                              // ищем первую букву с конца слова
                              std::find_if( str.rbegin(), str.rend(), []( const char &ch ){ return isalpha( ch ); } ).base(),
 
                              // всё, что между ними, копируем во временный объект
                              std::back_inserter( word )
                            );
 
                       // если в нём есть хотя бы один символ
                       if( word.length() )
                       {
                           // ищем такое слово в списке слов
                           words_count_t::iterator it = std::find( words_count.begin(), words_count.end(), word );
 
                           // если не найдено
                           if( words_count.end() == it )
                               words_count.push_back( word_t( word ) );  // загоняем его туда
                           else
                               it->count++; // иначе увеличиваем количество встречаний
                       }
                   }
                  );
 
    // сортируем элементы по возрастанию количества встречаний
    std::sort( words_count.rbegin(), words_count.rend() );
 
    // выводим поэлементно
    {
        size_t i = 20;
 
        for( words_count_t::const_iterator it = words_count.begin();
            i && it != words_count.end();
            i--, it++ )
                fout << *it << '\n';
    }
 
    return 0;
}
in.txt:
Let me take you far away
You'd like a holiday
Let me take you far away
You'd like a holiday

Exchange the cold days for the sun
A good time and fun
Let me take you far away
You'd like a holiday

Let me take you far away
You'd like a holiday
Let me take you far away
You'd like a holiday

Exchange your troubles for some love
Wherever you are
Let me take you far away
You'd like a holiday

Longing for the sun you will come
To the island without name
Longing for the sun be welcome
On the island many miles away from home
Be welcome on the island without name
Longing for the sun you will come
To the island many miles away from home
out.txt:
you: 9
the: 9
away: 8
Let: 6
me: 6
take: 6
far: 6
You'd: 6
like: 6
a: 6
holiday: 6
for: 5
sun: 4
island: 4
Longing: 3
come: 2
To: 2
without: 2
name: 2
welcome: 2
 
Текущее время: 05:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru