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

Частотный анализ текста (пословный) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.60
chro
2 / 2 / 0
Регистрация: 22.06.2009
Сообщений: 31
27.03.2010, 12:57     Частотный анализ текста (пословный) #1
24. Частотный анализ текста (пословный). (Подсчитывается относительная частота встречаемости каждого слова в тексте; границами слов являются символы: точка, запятая, двоеточие, точка с запятой, пробел, скобки, тире, вопросительный и восклицательный знаки.)
Текст вводится с клавиатуры, должна быть возможность записи его в файл; вывод результатов на экран, принтер или в файл по желанию пользователя.
Если возможно с блок-схемой.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
27.03.2010, 16:01     Частотный анализ текста (пословный) #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
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <map>
#include <string>
#include <sstream>
#include <iomanip>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::string delim(".:,;()-?!");//Разделители
    std::string string;
    //Ассоциативный контейнер, хранит пары (слово, число вхождений)
    std::map<std::string, size_t> freq;
    std::cout << "Введите строку" << std::endl;
    std::getline(std::cin, string);
    size_t str_count=0;//Число слов
    //Замена символов-разделителей из строки на пробел
    size_t index;
    while((index=string.find_first_of(delim))!=std::string::npos)
        string[index]=' ';
    //Разбиение строки на слова, помещение слов в ассоциативный контейнер и подсчет числа вхождений слова в строку
    std::stringstream ss(string);
    while(ss >> string)
    {
        ++str_count;
        freq[string]++;
    }
    std::cout << "Относительная частота вхождения каждого слова:" << std::endl;
    for(std::map<std::string, size_t>::iterator iter=freq.begin(); iter!=freq.end(); ++iter)
    {
        double p=static_cast<double>(iter->second)/static_cast<double>(str_count)*100;
        std::cout << "\'" << iter->first << "\': " << std::setprecision(4) << p << "%" << std::endl;
    }
    system("pause");
    return 0; 
}
chro
2 / 2 / 0
Регистрация: 22.06.2009
Сообщений: 31
28.03.2010, 22:27  [ТС]     Частотный анализ текста (пословный) #3
большое количество ошибок выдаёт Borland
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
28.03.2010, 22:58     Частотный анализ текста (пословный) #4
какая версия борланда?
chro
2 / 2 / 0
Регистрация: 22.06.2009
Сообщений: 31
29.03.2010, 15:48  [ТС]     Частотный анализ текста (пословный) #5
Borland C++ 3.0
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
29.03.2010, 22:31     Частотный анализ текста (пословный) #6
в нем нет поддержки пространств имен, поставьте что-нибудь новее Бесплатные среды (IDE) для программирования на С/С++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2010, 02:47     Частотный анализ текста (пословный)
Еще ссылки по теме:

C++ Частотный анализ байтов файла
Частотный анализ текста C++
C++ Частотный анализ

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

Или воспользуйтесь поиском по форуму:
chro
2 / 2 / 0
Регистрация: 22.06.2009
Сообщений: 31
30.03.2010, 02:47  [ТС]     Частотный анализ текста (пословный) #7
благодарю
Yandex
Объявления
30.03.2010, 02:47     Частотный анализ текста (пословный)
Ответ Создать тему
Опции темы

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