Advertisement
gguuppyy

лаба3н2

Dec 2nd, 2023 (edited)
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.74 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <windows.h>
  4. #include <string>
  5. #include <set>
  6.  
  7. using namespace std;
  8.  
  9. void printInfo() {
  10.     cout << "Программа описывает множество гласных и согласных букв русского алфавита и формирует множество гласных и согласных букв из предложения\n";
  11. }
  12.  
  13. set<char> getSetInText(set<char> stAlpha, string text)
  14. {
  15.     set<char> setInText;
  16.  
  17.     for (int i = 0; i < text.length(); i++)
  18.     {
  19.         if (stAlpha.find(text[i]) != stAlpha.end())
  20.         {
  21.             setInText.insert(text[i]);
  22.         }
  23.     }
  24.  
  25.     return setInText;
  26. }
  27.  
  28. string input(bool& isIncorrect) {
  29.     string str;
  30.     getline(cin, str);
  31.     if (str.empty()) {
  32.         isIncorrect = true;
  33.         cerr << "Ошибка. Строка не может быть пустой.\n";
  34.     }
  35.     return str;
  36. }
  37.  
  38. string readTextFromConsole() {
  39.     string text;
  40.     bool isIncorrect;
  41.     do {
  42.         isIncorrect = false;
  43.         cout << "Введите строку:\n";
  44.         text = input(isIncorrect);
  45.     } while (isIncorrect);
  46.     return text;
  47. }
  48.  
  49. bool checkExtension(string path) {
  50.     return path.substr(path.length() - 4) == ".txt";
  51. }
  52.  
  53. string readPath() {
  54.     ifstream fin;
  55.     string path;
  56.     bool isIncorrect;
  57.     cout << "Введите путь к файлу:\n";
  58.     do {
  59.         isIncorrect = false;
  60.         cin >> path;
  61.         fin.open(path);
  62.         if (!fin.is_open() || fin.fail()) {
  63.             isIncorrect = true;
  64.             cout << "Файл недоступен. Повторите ввод:\n";
  65.         }
  66.         else if (!checkExtension(path)) {
  67.             isIncorrect = true;
  68.             cout << "Неправильное расширение файла. Повторите ввод:\n";
  69.         }
  70.         fin.close();
  71.         while (cin.get() != '\n');
  72.     } while (isIncorrect);
  73.     return path;
  74. }
  75.  
  76. string readTextFromFile(ifstream& fin) {
  77.     string text;
  78.     getline(fin, text);
  79.     if (text.empty()) {
  80.         cout << "Ошибка. Файл пуст. ";
  81.     }
  82.     return text;
  83. }
  84.  
  85. string readFile() {
  86.     string path, text;
  87.  
  88.     path = readPath();
  89.     ifstream fin(path);
  90.     text = readTextFromFile(fin);
  91.     fin.close();
  92.     return text;
  93. }
  94.  
  95. string chooseAction() {
  96.     string input;
  97.     bool isIncorrect;
  98.     do {
  99.         isIncorrect = false;
  100.         cin >> input;
  101.         if ((input != "console") && (input != "file")) {
  102.             isIncorrect = true;
  103.             cout << "Ошибка. Введите 'console' или 'file':\n";
  104.         }
  105.     } while (isIncorrect);
  106.     return input;
  107. }
  108.  
  109. string chooseInput() {
  110.     string option, text;
  111.     cout << "Выберите способ ввода данных.\n" <<
  112.         "Введите 'console', если хотите ввести данные через консоль.\n" <<
  113.         "Введите 'file', если хотите передать данные из файла.\n";
  114.     option = chooseAction();
  115.     while (cin.get() != '\n');
  116.     if (option == "console") {
  117.         text = readTextFromConsole();
  118.     }
  119.     else
  120.         text = readFile();
  121.     return text;
  122. }
  123.  
  124. void writeConsole(string text, const set<char> vowels, const set<char> consonants) {
  125.  
  126.     int countAlphaVowels = 0;
  127.     int countAlphaConsonants = 0;
  128.     set<char> vowelsInText;
  129.     set<char> consonantsInText;
  130.  
  131.     vowelsInText = getSetInText(vowels, text);
  132.     countAlphaVowels = vowelsInText.size();
  133.     if (countAlphaVowels != 0)
  134.     {
  135.         cout << "\nЭлементы в множестве гласных букв: " << endl;
  136.         for (int i : vowelsInText)
  137.         {
  138.             cout << (char)i << " ";
  139.         }
  140.         cout << "\nКоличество элементов в множестве гласных букв: " << countAlphaVowels << "\n";
  141.     }
  142.     else
  143.     {
  144.         cout << "\nВ множестве гласных букв нет элементов.\n";
  145.     }
  146.  
  147.     consonantsInText = getSetInText(consonants, text);
  148.     countAlphaConsonants = consonantsInText.size();
  149.  
  150.     if (countAlphaConsonants != 0)
  151.     {
  152.         cout << "\nЭлементы в множестве согласных букв: " << endl;
  153.         for (int i : consonantsInText)
  154.         {
  155.             cout << (char)i << " ";
  156.         }
  157.         cout << "\nКоличество элементов в множестве согласных букв: " << countAlphaConsonants << "\n";
  158.     }
  159.     else
  160.     {
  161.         cout << "\nВ множестве согласных букв нет элементов.\n";
  162.     }
  163. }
  164.  
  165. void writeFile(string text, const set<char> vowels, const set<char> consonants) {
  166.     string path;
  167.     bool isIncorrect;
  168.     do {
  169.         isIncorrect = true;
  170.         path = readPath();
  171.         ofstream fout(path);
  172.         if (!fout.is_open()) {
  173.             cout << "Ошибка. Файл закрыт для записи. ";
  174.             isIncorrect = false;
  175.         }
  176.         else {
  177.  
  178.             int countAlphaVowels = 0;
  179.             int countAlphaConsonants = 0;
  180.             set<char> vowelsInText;
  181.             set<char> consonantsInText;
  182.  
  183.  
  184.             vowelsInText = getSetInText(vowels, text);
  185.             countAlphaVowels = vowelsInText.size();
  186.             if (countAlphaVowels != 0)
  187.             {
  188.                 fout << "Элементы в множестве гласных букв: " << endl;
  189.                 for (int i : vowelsInText)
  190.                 {
  191.                     fout << (char)i << " ";
  192.                 }
  193.                 fout << "\nКоличество элементов в множестве гласных букв: " << countAlphaVowels << "\n";
  194.             }
  195.             else
  196.             {
  197.                 fout << "В множестве гласных букв нет элементов.\n";
  198.             }
  199.  
  200.             consonantsInText = getSetInText(consonants, text);
  201.             countAlphaConsonants = consonantsInText.size();
  202.  
  203.             if (countAlphaConsonants != 0)
  204.             {
  205.                 fout << "Элементы в множестве согласных букв: " << endl;
  206.                 for (int i : consonantsInText)
  207.                 {
  208.                     fout << (char)i << " ";
  209.                 }
  210.                 fout << "\nКоличество элементов в множестве согласных букв: " << countAlphaConsonants << "\n";
  211.             }
  212.             else
  213.             {
  214.                 fout << "В множестве согласных букв нет элементов.\n";
  215.             }
  216.             cout << "Информация успешно записана в файл.";
  217.         }
  218.         fout.close();
  219.     } while (!isIncorrect);
  220. }
  221.  
  222. void chooseOutput(string text, const set<char> vowels, const set<char> consonants) {
  223.     string option;
  224.     cout << "Выберите способ вывода результата.\n" <<
  225.         "Введите 'console', если хотите вывести результат через консоль.\n" <<
  226.         "Введите 'file', если хотите передать результат в файл.\n";
  227.     option = chooseAction();
  228.     if (option == "console")
  229.         writeConsole(text, vowels, consonants);
  230.     else
  231.         writeFile(text, vowels, consonants);
  232. }
  233.  
  234. int main() {
  235.  
  236.     system("chcp 1251");
  237.  
  238.     const set<char> vowels{ 'а', 'у','о', 'и', 'э' ,'ы','я' , 'ю', 'ё', 'е' };
  239.     const set<char> consonants{ 'б','в', 'г', 'д', 'ж', 'з', 'й', 'л', 'м',
  240.         'н', 'р','к', 'п', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ' };
  241.  
  242.     string text = "";
  243.  
  244.     printInfo();
  245.     text = chooseInput();
  246.     chooseOutput(text, vowels, consonants);
  247. }
  248.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement