Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- void writeTask()
- {
- cout << "Данная программа выполняет следующие операции над данными строками:\n1. Нахождение символов, встречающихся в обеих строках;\n2. Нахождение символов, встречающихся только в первой строке;\n3. Нахождение символов, встречающихся только во второй строке.\n";
- }
- string takeStringFromConsole()
- {
- string str;
- bool isNotCorrect;
- do
- {
- isNotCorrect = false;
- cout << "Введите непустую строку: ";
- getline(cin, str);
- if (str == "")
- {
- isNotCorrect = true;
- cout << "Введённая строка должна быть непустой!\n";
- }
- } while (isNotCorrect);
- cout << "Полученная строка: " << str << endl;
- return str;
- }
- string takePathToFile()
- {
- string path;
- bool isNotCorrect;
- ifstream file;
- do
- {
- isNotCorrect = false;
- cout << "Введите путь к файлу: ";
- cin >> path;
- file.open(path);
- if (!file.is_open())
- {
- isNotCorrect = true;
- cout << "Файл не найден. Повторите попытку...\n";
- }
- } while (isNotCorrect);
- file.close();
- return path;
- }
- void takeStringFromFile(string& firstStr, string& secStr, int& choice)
- {
- cout << "Требуется файл для чтения строки. \n";
- string path = takePathToFile();
- bool isNotCorrect;
- ifstream file;
- do
- {
- isNotCorrect = false;
- file.open(path);
- file >> choice;
- if (file.fail())
- {
- file.clear();
- while (file.get() != '\n');
- cout << "Некорректно введённый порядок матрицы. ";
- isNotCorrect = true;
- }
- getline(file, firstStr);
- getline(file, firstStr);
- getline(file, secStr);
- if ((!isNotCorrect) && ((firstStr == "") || (secStr == "")))
- {
- isNotCorrect = true;
- cout << "Введённая последовательность должна быть непустой! \n";
- }
- if (isNotCorrect)
- {
- cout << "Повторите попытку... ";
- file.close();
- path = takePathToFile();
- }
- } while (isNotCorrect);
- file.close();
- cout << "Полученный номер операции: " << choice << endl;
- cout << "Полученная первая строка: '" << firstStr << "'\n";
- cout << "Полученная вторая строка: '" << secStr << "'\n";
- }
- int chooseMethod(bool isForInputOutput)
- {
- bool isNotCorrect;
- int choice;
- do
- {
- isNotCorrect = false;
- cin >> choice;
- if (cin.fail())
- {
- cin.clear();
- while (cin.get() != '\n');
- cout << "Число введено некорректно. Повторите попытку...\n";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (cin.get() != '\n'))
- {
- cin.clear();
- cout << "Число введено некорректно. Повторите попытку...\n";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (isForInputOutput) && (choice != 1) && (choice != 2))
- {
- cout << "Введите либо 1, либо 2. Ваш выбор: ";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (!isForInputOutput) && (choice != 1) && (choice != 2) && (choice != 3))
- {
- cout << "Введите либо 1, либо 2, либо 3. Ваш выбор: ";
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return choice;
- }
- void getString(string& firstStr, string& secStr, int& choice)
- {
- bool isForInput = true;
- cout << "Введите способ получения строки(1 - через консоль, 2 - с помощью файла): ";
- int inputChoice = chooseMethod(isForInput);
- if (inputChoice == 1)
- {
- firstStr = takeStringFromConsole();
- secStr = takeStringFromConsole();
- cout << "Введите номер операции : ";
- choice = chooseMethod(!isForInput);
- }
- else
- {
- takeStringFromFile(firstStr, secStr, choice);
- }
- }
- string findIntersectionOfStrings(string firstStr, string secStr)
- {
- string answer = "";
- int symbolePresence;
- for (int i = 0; i < size(firstStr); i++)
- {
- symbolePresence = secStr.find(firstStr[i]);
- if (symbolePresence != -1)
- {
- answer += firstStr[i];
- }
- }
- return answer;
- }
- string findSpecialCharInString(string firstStr, string secStr)
- {
- string answer = "";
- int symbolePresence;
- for (int i = 0; i < size(firstStr); i++)
- {
- symbolePresence = secStr.find(firstStr[i]);
- if (symbolePresence == -1)
- {
- answer += firstStr[i];
- }
- }
- return answer;
- }
- string takeAnswer(string firstStr, string secStr, int choice)
- {
- string answer;
- if (choice == 1)
- {
- answer = findIntersectionOfStrings(firstStr, secStr);
- }
- else
- {
- if (choice == 2)
- {
- answer = findSpecialCharInString(firstStr, secStr);
- }
- else
- {
- answer = findSpecialCharInString(secStr, firstStr);
- }
- }
- return answer;
- }
- void outputAnswerInFile(string answer)
- {
- cout << "Требуется файл для записи искомого множества.\n";
- string path = takePathToFile();
- ofstream file;
- file.open(path);
- if (answer == "")
- {
- file << "Искомых символов не найдено.";
- }
- else
- {
- file << "Искомая строка: '" << answer << "'";
- }
- file.close();
- cout << "Ответ записан в файл!\n";
- }
- void outputAnswerInConsole(string answer)
- {
- if (answer == "")
- {
- cout << "Искомых символов не найдено.";
- }
- else
- {
- cout << "Искомая строка: '" << answer << "'";
- }
- }
- void outputAnswer(string answer)
- {
- cout << "Выберите способ вывода полученной строки(1 - с помощью консоли, 2 - с помощью файлов): ";
- bool isForOutput = true;
- int choice = chooseMethod(isForOutput);
- if (choice == 1)
- {
- outputAnswerInConsole(answer);
- }
- else
- {
- outputAnswerInFile(answer);
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- writeTask();
- string firstString = "";
- string secondString = "";
- int choice = 0;
- getString(firstString, secondString, choice);
- string answer = takeAnswer(firstString, secondString, choice);
- outputAnswer(answer);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement