лаба6 3й семестр
.docxСт. Новичонок М.С. Гр. ІНФ-15-1
Лабораторная работа №6
Тема: «Работа с элементами стандартной библиотеки С++»
Вариант №6
//Разработать программу, которая считывает текст и вычисляет среднюю частоту встречаемости букв
//в данном тексте, за исключением слов, указанных в списке (число вхождений буквы / длину текста
//без длины слов из списка). Слова в тексте разделяются пробелами (при подсчете частоты пробелы не учитывать).
//Подсчет частоты реализовывать с помощью ассоциативного массива, список слов для исключения реализовывать с
//помощью множества. Каждый раз, когда встретилось слово из списка, выводить сообщение. Создать набор функций
//для вывода результатов и вынести их в отдельный файл. Объявления функций вынести в заголовочный файл.
//Исходные данные считать из файла и вывести в файл.
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
set<string> exceptions;//список слов-исключений
ifstream f1("exceptions.txt");//запись исключений в строку
while(!f1.eof())
{
string s1;
f1>>s1;
exceptions.insert(s1);
}
cout<<endl;
f1.close();
ifstream in("file.txt");
if (!in)
cout << "error" << endl;
else cout << "Successful readed" << endl;
string str;
while (!in.eof())
{
getline(in, str, '.');}
in.close();
cout << str << endl;
string word;
vector<string> vs;
std::istringstream iss(str, std::istringstream::in);
while (iss >> word)
{vs.push_back(word);}
for (int i = 0; i<vs.size(); ++i)
{
for (auto j = exceptions.begin(); j != exceptions.end(); j++)
{
if (vs[i] == *j)
{
cout << vs[i] << " - from list of exeption. " << endl;
vs[i] = "0";
}
}
}
str.clear();
for (int i = 0; i < vs.size(); ++i)
{
if (vs[i] != "0")
{
str = str + vs[i];
}
}
cout << endl;
int length = 0;//длина текста без пробелов
for (int i = 0; i<str.size(); i++)
{
if (str[i] != ' ')
{
length++;
}
}
cout<<"Length of text: "<<length<<endl;
map<string, double> Count_map;
for (int i=0; i<str.size(); ++i)
{
if (str[i] != ' ')
{
string s;
s = str[i];
Count_map[s]++;
}
}
cout<<"Avarage frequency of characters: "<<endl;
for (map<string, double>::iterator p = Count_map.begin(); p != Count_map.end(); ++p)
{
cout << p->first << " -> " << p->second/length << endl;
}
cin.get();
return 0;
}