Частотный словарь
Построение частотного словаря. Имеется файл с некоторым текстом
(текс товый файл). Требуе тся построи ть так называемый час то т ный словарь
для этого файла. Словом называется последовательность букв (латинских
и/или русских), ограниченная одним или несколькими разделителями.
Разделителями называются пробелы, знаки пунктуации, а также любые
непечатные символы.
Построение часто тного словаря заключается в определении как часто
определённое слово (или символ, или последовательность символов)
встречается в тексте. Требуется определить как абсолютное значение
(количество вхождений), так и относительное (в процентном отношении).
Для решения э той задачи удобно использоват ь массив с трук туры с двумя
полями: слово и количество вхождений этого слова в текст.
На каком языке то? Для этих целей подходит ассоциативный массив, где слова - ключи, а значения - кол-во вхождений
С++
Код:
#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;
}
#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;
}
http://forum.codenet.ru/q39184/
спс, а там коментов нет нигде?