Advertisement
Guest User

Aue01

a guest
Mar 21st, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <cctype>
  5. using namespace std;
  6. template <class T> //внутри вмсето т будет подставлент тип данных
  7. struct Vector
  8. {
  9.     T* arr;             //создаем указатель на массив
  10.     int N = 0;          //индекс нулевой
  11.     int maxSize;        //макс размер вектора
  12.     Vector(int n)       //ф-ия вектор которая принимает число н - макс размер вектора
  13.     {
  14.         maxSize = n;
  15.         arr = new T[maxSize];   //выделение памяти(ячеек) под массив
  16.     }
  17.     void push_back(T data)      //ф-ия вставки элемента
  18.     {
  19.                                                 /*Заносит элемент в массив
  20.                                                 Если места нет, то создаёт вместо этого массива новый,
  21.                                                 в два раза больше предыдущего, и
  22.                                                 заносит все, что было в старом, в него*/
  23.         if (N == maxSize - 1)
  24.         {
  25.             T* temp = arr;
  26.             arr = new T[maxSize *= 2];
  27.             for (int i = 0; i < N; i++)
  28.                 arr[i] = temp[i];
  29.             delete[] temp;
  30.         }
  31.         arr[N++] = data;
  32.     }
  33.     int load(string filename)       //ф-ия загрузки файла которая принимает аргумент имя файла
  34.     {
  35.         string data;
  36.         ifstream file(filename);    // создаем объект класса ifstream
  37.         if (!file)                  //если нету файла
  38.         {
  39.             cout << "error\n";      //выводит ошибку
  40.             return 0;
  41.         }
  42.         while (file >> data)        //пока не считало все
  43.         {
  44.             for (int i = data.length()-1; i >= 0; i--)
  45.             {
  46.                 if (!isalpha(data[i]))          //проверка data[i] является ли он строчной или прописной буквой алфавита.
  47.                 {
  48.                     data.pop_back();            //удаляет последний элемент
  49.  
  50.                 }
  51.             }
  52.             for (int i = 0; i < data.length(); i++)
  53.                 data[i] = tolower(data[i]);     //преобразование прописных букв в строчные
  54.             if (data.length() > 0)
  55.                 push_back(data);                //добавление элемента в конец вектора
  56.  
  57.         }
  58.         return 1;
  59.     }
  60.     void q_sort()
  61.     {
  62.         recQSort(0, N - 1);
  63.     }
  64.     //сортирует слова по алфавиту
  65.     void recQSort(int left, int right)  //функция быстрой сортировки
  66.     {
  67.         if (right - left <= 0)          //если нету слов
  68.             return;
  69.         else
  70.         {
  71.             T pivot = arr[right];       //присваиваем последий элемент(крайнюю границу)
  72.             int leftPtr = left - 1, rightPtr = right;
  73.             while (true)
  74.             {
  75.                 while (arr[++leftPtr] < pivot);
  76.                 while (rightPtr > 0 && arr[--rightPtr] > pivot);
  77.                 if (leftPtr >= rightPtr)
  78.                     break;
  79.                 else
  80.                 {
  81.                     T temp = arr[leftPtr];
  82.                     arr[leftPtr] = arr[rightPtr];
  83.                     arr[rightPtr] = temp;
  84.                 }
  85.             }
  86.             T temp = arr[leftPtr];
  87.             arr[leftPtr] = arr[right];
  88.             arr[right] = temp;
  89.             int partitition = leftPtr;
  90.             recQSort(left, partitition - 1);
  91.             recQSort(partitition + 1, right);
  92.         }
  93.     }
  94.     void freq_anal()                                        //сколько раз слово встречается в тексте
  95.     {
  96.         int ptr = 0, counter = 1;
  97.         while (ptr < N)                                     //пока переменная меньше макс ращмера вектора
  98.         {
  99.             if (arr[ptr] != arr[ptr + 1])                   //если слова не одинаковы
  100.             {
  101.                 cout << arr[ptr] << " - " << counter << '\n';   //выводит что слово встречается один раз в тексте
  102.                 counter = 0;
  103.             }
  104.             ptr++;
  105.             counter++;
  106.         }
  107.  
  108.     }
  109. };
  110. int main()
  111. {
  112.     string fname;
  113.     int n;
  114.     cout << "print size: ";
  115.     cin >> n;
  116.     Vector<string> v(n);
  117.     cout << "print file name: ";
  118.     cin >> fname;
  119.     int c = v.load(fname);
  120.     if (c)
  121.     {
  122.         v.q_sort();
  123.         v.freq_anal();
  124.     }
  125.     return 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement