Advertisement
SmnVadik

№25 Lab3_1

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