Advertisement
ksyshshot

Lab.3.1

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