Advertisement
ksyshshot

Lab.3.2

Nov 17th, 2022 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.63 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <set>
  5.  
  6. using namespace std;
  7.  
  8. void writeTask()
  9. {
  10.     cout << "Данная программа строит и печатает множество, элементами которого\n" << "являются встречающиеся в последовательности скобки : () [] {} и цифры\n";
  11. }
  12.  
  13. string takeCharacterSequenceFromConsole()
  14. {
  15.     string sequence;
  16.     bool isNotCorrect;
  17.     do
  18.     {
  19.         isNotCorrect = false;
  20.         cout << "Введите непустую последовательность: ";
  21.         getline(cin, sequence);
  22.         if (sequence == "")
  23.         {
  24.             isNotCorrect = true;
  25.             cout << "Введённая последовательность должна быть непустой!\n";
  26.         }
  27.     } while (isNotCorrect);
  28.     cout << "Полученная строка: " << sequence << endl;
  29.     return sequence;
  30. }
  31.  
  32. string takePathToFile()
  33. {
  34.     string path;
  35.     bool isNotCorrect;
  36.     ifstream file;
  37.     do
  38.     {
  39.         isNotCorrect = false;
  40.         cout << "Введите путь к файлу: ";
  41.         cin >> path;
  42.         file.open(path);
  43.         if (!file.is_open())
  44.         {
  45.             isNotCorrect = true;
  46.             cout << "Файл не найден. Повторите попытку...\n";
  47.         }
  48.     } while (isNotCorrect);
  49.     file.close();
  50.     return path;
  51. }
  52.  
  53. string takeCharacterSequenceFromFile()
  54. {
  55.     cout << "Требуется файл для чтения строки.\n";
  56.     string path = takePathToFile();
  57.     bool isNotCorrect;
  58.     string sequence;
  59.     ifstream file;
  60.     do
  61.     {
  62.         isNotCorrect = false;
  63.         file.open(path);
  64.         getline(file, sequence);
  65.         if (sequence == "")
  66.         {
  67.             isNotCorrect = true;
  68.             cout << "Введённая последовательность должна быть непустой!\n";
  69.         }
  70.         if (isNotCorrect)
  71.         {
  72.             cout << "Произошла ошибка доступа к файлу. Заново введите путь к файлу: ";
  73.             file.close();
  74.             path = takePathToFile();
  75.         }
  76.     } while (isNotCorrect);
  77.     file.close();
  78.     cout << "Полученная строка: " << sequence << endl;
  79.     return sequence;
  80. }
  81.  
  82. set<char> getSearchCharactersSet(string sequence)
  83. {
  84.     set<char> searchCharacters{ '(', ')', '{', '}', '[', ']', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
  85.     set<char> searchSet{};
  86.     for (int i = 0; i < sequence.length(); i++)
  87.     {
  88.         if (searchCharacters.count(sequence[i]))
  89.         {
  90.             searchSet.insert(sequence[i]);
  91.         }
  92.     }
  93.     return searchSet;
  94. }
  95.  
  96. void outputSetInConsole(set<char> charactersSet)
  97. {
  98.     if (!charactersSet.empty())
  99.     {
  100.         for (auto it = charactersSet.begin(); it != charactersSet.end(); it++)
  101.         {
  102.             cout << *it << " ";
  103.         }
  104.     }
  105.     else
  106.     {
  107.         cout << "В строке не было найдено скобок и цифр.\n";
  108.     }
  109. }
  110.  
  111. void outputSetInFile(set<char> charactersSet)
  112. {
  113.     cout << "Требуется файл для записи искомого множества.\n";
  114.     string path = takePathToFile();
  115.     ofstream file;
  116.     file.open(path);
  117.     if (!charactersSet.empty())
  118.     {
  119.         for (auto it = charactersSet.begin(); it != charactersSet.end(); it++)
  120.         {
  121.             file << *it << " ";
  122.         }
  123.     }
  124.     else
  125.     {
  126.         file << "В строке не было найдено скобок и цифр.\n";
  127.     }
  128.     file.close();
  129.     cout << "Множество записано в файл!\n";
  130. }
  131.  
  132. int chooseInputOutputMethod()
  133. {
  134.     bool isNotCorrect;
  135.     int choice;
  136.     do
  137.     {
  138.         isNotCorrect = false;
  139.         cin >> choice;
  140.         if (cin.fail())
  141.         {
  142.             cin.clear();
  143.             while (cin.get() != '\n');
  144.             cout << "Число введено некорректно. Повторите попытку...\n";
  145.             isNotCorrect = true;
  146.         }
  147.         if ((!isNotCorrect) && (cin.get() != '\n'))
  148.         {
  149.             cin.clear();
  150.             cout << "Число введено некорректно. Повторите попытку...\n";
  151.             isNotCorrect = true;
  152.         }
  153.         if ((!isNotCorrect) && (choice != 1) && (choice != 2))
  154.         {
  155.             cout << "Введите либо 1, либо 2. Ваш выбор: \n";
  156.             isNotCorrect = true;
  157.         }
  158.     } while (isNotCorrect);
  159.     return choice;
  160. }
  161.  
  162. string getCharacterSequence(int choice)
  163. {
  164.     string sequence;
  165.     if (choice == 1)
  166.     {
  167.         sequence = takeCharacterSequenceFromConsole();
  168.     }
  169.     else
  170.     {
  171.         sequence = takeCharacterSequenceFromFile();
  172.     }
  173.     return sequence;
  174. }
  175.  
  176. void outputResult(int choice, set<char> answer)
  177. {
  178.     if (choice == 1)
  179.     {
  180.         outputSetInConsole(answer);
  181.     }
  182.     else
  183.     {
  184.         outputSetInFile(answer);
  185.     }
  186. }
  187.  
  188. int main()
  189. {
  190.     setlocale(LC_ALL, "Rus");
  191.     writeTask();
  192.     cout << "Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ";
  193.     int choice = chooseInputOutputMethod();
  194.     string sequence = getCharacterSequence(choice);
  195.     set<char> answer = getSearchCharactersSet(sequence);
  196.     cout << "Выберите способ вывода данных (1 - через консоль, 2 - с помощью файлов): ";
  197.     choice = chooseInputOutputMethod();
  198.     outputResult(choice, answer);
  199.     return 0;
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement