Advertisement
Vernon_Roche

Задание 2 C++ (Лабораторная работа 3)

Nov 12th, 2023 (edited)
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.97 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <stdlib.h>
  5. #include <set>
  6.  
  7. using namespace std;
  8.  
  9. int chooseWay(const int);
  10. void inputText(string&, const int);
  11. void inputFromFile(string&, string&);
  12. string inputFileName(const int);
  13. void inputFromConsole(string&);
  14. void searchNumsAndSigns(set<char>&, set<char>&, string&);
  15. void outputResult(set<char>, const int);
  16. void outputInFile(string&, set<char>);
  17. void outputInConsole(set<char>);
  18.  
  19. const int INPUT = 1,
  20.           OUTPUT = 2;
  21.  
  22. int main()
  23. {
  24.     system("chcp 1251 > nul");
  25.     string text;
  26.     int choice;
  27.     set<char> numsAndSigns, resultSet;
  28.     numsAndSigns = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '/', '*'};
  29.     cout << "Программа выводит множество содержащихся в введенном тексте цифр и знаков препинания\n";
  30.     choice = chooseWay(INPUT);
  31.     inputText(text, choice);
  32.     searchNumsAndSigns(resultSet, numsAndSigns, text);
  33.     choice = chooseWay(OUTPUT);
  34.     outputResult(resultSet, choice);
  35.     return 0;
  36. }
  37.  
  38. int chooseWay(const int IorOput)
  39. {
  40.     int choice;
  41.     bool isNotCorrect;
  42.     switch (IorOput) {
  43.         case INPUT:
  44.             cout << "Выберите вариант ввода:\n";
  45.             cout << "1.Данные вводятся из текстового файла.\n";
  46.             cout << "2.Данные вводятся через консоль.\n";
  47.             break;
  48.         default:
  49.             cout << "Выберите вариант вывода:\n";
  50.             cout << "1.Данные выводятся в текстовый файл.\n";
  51.             cout << "2.Данные выводятся в консоль.\n";
  52.     }
  53.     do {
  54.         cin >> choice;
  55.         if (cin.fail() || cin.get() != '\n') {
  56.             isNotCorrect = true;
  57.             cout << "Ошибка ввода. Выберите вариант 1 или 2." << '\n';
  58.             cin.clear();
  59.             while (cin.get() != '\n');
  60.         }
  61.         else if ((choice < 1) || (choice > 2)) {
  62.             cout << "Ошибка ввода. Выберите вариант 1 или 2." << '\n';
  63.             isNotCorrect = true;
  64.         }
  65.         else
  66.             isNotCorrect = false;
  67.     } while (isNotCorrect);
  68.     return choice;
  69. }
  70.  
  71. void inputText(string& text, const int choice)
  72. {
  73.     text = "";
  74.     switch (choice) {
  75.     case 1: {
  76.         string fileName;
  77.         fileName = inputFileName(INPUT);
  78.         inputFromFile(text, fileName);
  79.         break;
  80.     }
  81.     default:
  82.         inputFromConsole(text);
  83.     }
  84. }
  85.  
  86. string inputFileName(const int inOrOut)
  87. {
  88.     string fileName;
  89.     switch (inOrOut) {
  90.         case INPUT: {
  91.             cout << "Введите имя файла, из которого будут вводиться данные:\n";
  92.             ifstream in;
  93.             do {
  94.                 getline(cin, fileName);
  95.                 if (fileName.ends_with(".txt")) {
  96.                     in.open(fileName);
  97.                     if (in.is_open()) {
  98.                         in.close();
  99.                         return fileName;
  100.                     }
  101.                     else
  102.                         cout << "Невозможно открыть файл с таким именем! Повторите ввод имени файла:\n";
  103.                 }
  104.                 else
  105.                     cout << "Файл должен иметь расширение .txt! Повторите ввод имени файла:\n";
  106.             } while (true);
  107.             break;
  108.         }
  109.         default: {
  110.             cout << "Введите имя файла, в который будут выводиться полученные данные (если файл вводится без расширения, то ему автоматически будет добавлено расширение .txt):\n";
  111.             ofstream out;
  112.             do {
  113.                 getline(cin, fileName);
  114.                 if (fileName.find(".") == string::npos)
  115.                     fileName = fileName + ".txt";
  116.                 out.open(fileName);
  117.                 if (out.is_open()) {
  118.                     out.close();
  119.                     return fileName;
  120.                 }
  121.                 else
  122.                     cout << "Невозможно открыть или создать файл с таким именем! Повторите ввод имени файла:\n";
  123.             } while (true);
  124.         }  
  125.     }
  126. }
  127.  
  128. void inputFromConsole(string& text)
  129. {
  130.     cout << "Введите строку для обработки:\n";
  131.     getline(cin, text);
  132. }
  133.  
  134. void searchNumsAndSigns(set<char>& resultSet, set<char>& numsAndSigns, string& text)
  135. {
  136.     for (int i = 0; i < text.length(); i++)
  137.         if (numsAndSigns.count(text[i]))
  138.             resultSet.insert(text[i]);
  139. }
  140.  
  141. void inputFromFile(string& text, string& fileName)
  142. {
  143.     ifstream in;
  144.     string fileString;
  145.     in.open(fileName);
  146.     while (!in.eof()) {
  147.         getline(in, fileString);
  148.         text = text + fileString;
  149.     }
  150. }
  151.  
  152. void outputResult(set<char> resultSet, const int choice)
  153. {
  154.     switch (choice) {
  155.     case 1: {
  156.         string fileName;
  157.         fileName = inputFileName(OUTPUT);
  158.         outputInFile(fileName, resultSet);
  159.         cout << "Искомые данные выведены в файл " << fileName;
  160.         break;
  161.     }
  162.     default:
  163.         outputInConsole(resultSet);
  164.     }
  165. }
  166.  
  167. void outputInFile(string& fileName, set<char> resultSet)
  168. {
  169.     ofstream out;
  170.     out.open(fileName);
  171.     for (char i : resultSet) {
  172.         out << i << ' ';
  173.     }
  174.     out.close();
  175. }
  176.  
  177. void outputInConsole(set<char> resultSet)
  178. {
  179.     cout << "Искомое множество:\n";
  180.     for (char i : resultSet) {
  181.         cout << i << ' ';
  182.     }
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement