Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба6 3й семестр

.docx
Скачиваний:
5
Добавлен:
15.05.2017
Размер:
49.61 Кб
Скачать

Ст. Новичонок М.С. Гр. ІНФ-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;

}