Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Частотный словарь

81K
22 апреля 2012 года
kiso4ka
3 / / 19.04.2012
. Задание: частотный словарь слов.
Построение частотного словаря. Имеется файл с некоторым текстом
(текс товый файл). Требуе тся построи ть так называемый час то т ный словарь
для этого файла. Словом называется последовательность букв (латинских
и/или русских), ограниченная одним или несколькими разделителями.
Разделителями называются пробелы, знаки пунктуации, а также любые
непечатные символы.
Построение часто тного словаря заключается в определении как часто
определённое слово (или символ, или последовательность символов)
встречается в тексте. Требуется определить как абсолютное значение
(количество вхождений), так и относительное (в процентном отношении).
Для решения э той задачи удобно использоват ь массив с трук туры с двумя
полями: слово и количество вхождений этого слова в текст.
72K
23 апреля 2012 года
CorsaiR
59 / / 07.03.2012
На каком языке то? Для этих целей подходит ассоциативный массив, где слова - ключи, а значения - кол-во вхождений
81K
23 апреля 2012 года
kiso4ka
3 / / 19.04.2012
С++
72K
23 апреля 2012 года
CorsaiR
59 / / 07.03.2012
С сайберфорума

Код:
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
#include <iterator>
#include <sstream>
#include <map>
 
int main()
{
    std::ifstream ifs("1.txt");
    if(ifs)
    {
        std::string s(std::istreambuf_iterator<char>(ifs.rdbuf()), std::istreambuf_iterator<char>());
        for(std::string::iterator it = s.begin(); it != s.end(); ++it)
        {
            if(!isalpha(*it))
            {
                *it = ' ';
            }
            else if(isupper(*it))
            {
                *it = tolower(*it);
            }
        }
        std::map<std::string, std::size_t> map;
        std::istringstream iss(s);
        while(iss >> s)
        {
            ++map[s];
        }
        for(std::map<std::string, std::size_t>::const_iterator it = map.begin(); it != map.end(); ++it)
        {
            std::cout << it->first << ' ' << it->second << std::endl;
        }
    }
    else
    {
        std::cerr << "File not found\n";
    }
    ifs.close();
    return 0;
}
72K
23 апреля 2012 года
CorsaiR
59 / / 07.03.2012
Еще отсюда
http://forum.codenet.ru/q39184/
81K
23 апреля 2012 года
kiso4ka
3 / / 19.04.2012
спс, а там коментов нет нигде?

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог