Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <locale.h>
  4. #include <windows.h>
  5. #include <cmath>
  6. #include <sys/stat.h>
  7. #include <string>
  8. #include <set>
  9. #include <string>
  10. #include <algorithm>
  11. #include <cctype>
  12. #include <cwctype>
  13. #include <locale>
  14.  
  15. using namespace std;
  16. const string ERROR3 = "Последовательность не содержит цифр и знаков арифметических операций. Повторите попытку";
  17. const string ERROR1 = "Последовательность должна состоять более чем из одного элемента.";
  18. const string MASS = "Введите имя файла в формате 'name.txt'.";
  19. const string ERROR0 = "Ошибка доступа, повторите попытку.";
  20. const string ENTER_CHOIСE = "Последовательность вводится из клавиатуры или из файла? (Key|File)";
  21. const string ERROR2 = "Ошибка ввода. Введите 'Key' или 'File'.";
  22. const string COR_SEN = "Множество, состоящее из цифр и знаков арифметических операций введенной последовательности:";
  23. const string FIR_SEN = "Введенная последовательность:";
  24. const string RESULT_NAME = "Введите имя файла, в который нужно записать результат.";
  25. const string MAS_F = "Результат записан в указанный файл.";
  26. const string TASK = "Задача: Для последнего слова заданного предложения указать, сколько раз оно встречается в предложении. После этого удалить повторяющиеся гласные и знаки препинания.";
  27.  
  28. set <char> Symbols = { 42, 43, 45, 47, 94 };
  29. set <char> Final_Array{};
  30.  
  31. string EnterChoice()
  32. {
  33.     string Choice;
  34.     bool IsCorrect;
  35.     cout << ENTER_CHOIСE << endl;
  36.     do {
  37.         cin >> Choice;
  38.         if ((Choice == "Key") || (Choice == "File"))
  39.             IsCorrect = false;
  40.         else {
  41.             cout << ERROR0 << endl;
  42.             IsCorrect = true;
  43.         }
  44.     } while (IsCorrect);
  45.     return Choice;
  46. }
  47.  
  48. string enterSequence(string fileName)
  49. {
  50.     string s, sentence = "";
  51.     ifstream f;
  52.     f.open(fileName);
  53.     while (!f.eof())
  54.     {
  55.         getline(f, s);
  56.         sentence += s;
  57.     }
  58.     f.close();
  59.     return sentence;
  60. }
  61.  
  62. boolean correctSequence(string sequence, int n)
  63. {
  64.     int i = 0;
  65.     bool isCorrect = true;
  66.     while ((i < n) && (isCorrect == true)) {
  67.         auto it = Symbols.find(sequence[i]);
  68.         if (isdigit(sequence[i])) {
  69.             isCorrect = false;
  70.         }
  71.         else {
  72.             if (Symbols.find(sequence[i]) == Symbols.end()) {
  73.             }
  74.             else {
  75.                 isCorrect = false;
  76.             }
  77.         }
  78.         i++;
  79.     }
  80.     if (isCorrect == true) {
  81.         cout << ERROR3 << endl;
  82.     }
  83.     return isCorrect;
  84. }
  85.  
  86. string correctSequenceKey()
  87. {
  88.     int n;
  89.     string sequence;
  90.     boolean isCorrect = true;
  91.     const int MIN_NUM = 2;
  92.     cout << "Введите последовательность" << endl;
  93.     do {
  94.         getline(std::cin, sequence);
  95.         n = sequence.length();
  96.         if (n < MIN_NUM) {
  97.             cout << ERROR1 << endl;
  98.             isCorrect = true;
  99.         }
  100.         else {
  101.             isCorrect = correctSequence(sequence, n);
  102.         }
  103.     } while (isCorrect);
  104.     return sequence;
  105. }
  106.  
  107.  
  108.  
  109. string EnterFileName(string Message)
  110. {
  111.     const string ERROR_3 = "Имя файла введено некорректно.";
  112.     string NameFile;
  113.     bool IsCorrect;
  114.     cout << Message << endl;
  115.     ifstream found;
  116.     do {
  117.         cin >> NameFile;
  118.         found.open(NameFile);
  119.         if (found.is_open())
  120.             IsCorrect = false;
  121.         else
  122.         {
  123.             cout << ERROR_3 << endl;
  124.             IsCorrect = true;
  125.         }
  126.     } while (IsCorrect);
  127.     return NameFile;
  128. }
  129.  
  130. boolean checkEmptyFile(int num)
  131. {
  132.     boolean isCorrect = true;
  133.     if (num == 0) {
  134.         cout << "Файл пуст. Повторите попытку." << endl;
  135.         isCorrect = false;
  136.     }
  137.     return isCorrect;
  138. }
  139.  
  140. void enterArray(string sequence, int num)
  141. {
  142.     int i,
  143.         n = 0;
  144.     for (i = 0; i < num; i++) {
  145.         if (isdigit(sequence[i])) {
  146.             Final_Array.insert(sequence[i]);
  147.         }
  148.         else {
  149.             if (Symbols.find(sequence[i]) == Symbols.end()) {}
  150.             else
  151.                 Final_Array.insert(sequence[i]);
  152.             n++;
  153.         }
  154.     }
  155. }
  156.  
  157. void outputArray(int n, string sequence)
  158.  
  159. {
  160.     int i;
  161.     cout << COR_SEN;
  162.     for (i = 0; i < n-1; i++)
  163.         if (Final_Array.find(sequence[i]) == Final_Array.end()){}
  164.         else
  165.             cout << sequence[i] << ", ";
  166.     cout << sequence[i] << endl;
  167. }
  168.  
  169. void writeResultFile(int n, string sequence, string outputFileName)
  170. {
  171.     try
  172.     {
  173.         ofstream f;
  174.         f.open(outputFileName);
  175.         f << FIR_SEN << endl << sequence << endl << COR_SEN << endl << endl;
  176.         for (int i = 0; i < n; i++)
  177.             if (Final_Array.find(sequence[i]) == Symbols.end()) {}
  178.             else
  179.                 f << sequence[i] << ", ";
  180.         f.close();
  181.     }
  182.     catch (...)
  183.     {
  184.         cout << ERROR0 << endl;
  185.     }
  186.     return;
  187. }
  188.  
  189. int main()
  190. {
  191.     SetConsoleCP(1251);
  192.     SetConsoleOutputCP(1251);
  193.     const string TASK = "Задача: Дана непустая последовательность символов, требуется построить и напечатать множество, элементами которого являются встречающиеся в последовательности знаки арифметических операций и цифры.";
  194.     string choice, sequence, outputFileName, fileName;
  195.     int num;
  196.     boolean isCorrect = true;
  197.     cout << TASK << endl;
  198.     choice = EnterChoice();
  199.     if (choice == "Key")
  200.     {
  201.         sequence = correctSequenceKey();
  202.         num = sequence.length();
  203.     }
  204.     else
  205.     {
  206.         do {
  207.             fileName = EnterFileName(MASS);
  208.             sequence = enterSequence(fileName);
  209.             num = sequence.length();
  210.             isCorrect = checkEmptyFile(num);
  211.             isCorrect = correctSequence(sequence, num);
  212.         } while (isCorrect);
  213.     }
  214.     cout << FIR_SEN << endl << sequence << endl;
  215.     enterArray(sequence, num);
  216.     outputArray(num, sequence);
  217.     if (choice == "File") {
  218.         cout << RESULT_NAME << endl;
  219.         outputFileName = EnterFileName(RESULT_NAME);
  220.         writeResultFile(num, sequence, outputFileName);
  221.         cout << MAS_F << endl;
  222.     }
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement