Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <set>
- using namespace std;
- void writeTask()
- {
- cout << "Данная программа строит и печатает множество, элементами которого\n" << "являются встречающиеся в последовательности скобки : () [] {} и цифры\n";
- }
- string takeCharacterSequenceFromConsole()
- {
- string sequence;
- bool isNotCorrect;
- do
- {
- isNotCorrect = false;
- cout << "Введите непустую последовательность: ";
- getline(cin, sequence);
- if (sequence == "")
- {
- isNotCorrect = true;
- cout << "Введённая последовательность должна быть непустой!\n";
- }
- } while (isNotCorrect);
- cout << "Полученная строка: " << sequence << endl;
- return sequence;
- }
- 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;
- }
- string takeCharacterSequenceFromFile()
- {
- cout << "Требуется файл для чтения строки.\n";
- string path = takePathToFile();
- bool isNotCorrect;
- string sequence;
- ifstream file;
- do
- {
- isNotCorrect = false;
- file.open(path);
- getline(file, sequence);
- if (sequence == "")
- {
- isNotCorrect = true;
- cout << "Введённая последовательность должна быть непустой!\n";
- }
- if (isNotCorrect)
- {
- cout << "Произошла ошибка доступа к файлу. Заново введите путь к файлу: ";
- file.close();
- path = takePathToFile();
- }
- } while (isNotCorrect);
- file.close();
- cout << "Полученная строка: " << sequence << endl;
- return sequence;
- }
- set<char> getSearchCharactersSet(string sequence)
- {
- set<char> searchCharacters{ '(', ')', '{', '}', '[', ']', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
- set<char> searchSet{};
- for (int i = 0; i < sequence.length(); i++)
- {
- if (searchCharacters.count(sequence[i]))
- {
- searchSet.insert(sequence[i]);
- }
- }
- return searchSet;
- }
- void outputSetInConsole(set<char> charactersSet)
- {
- if (!charactersSet.empty())
- {
- for (auto it = charactersSet.begin(); it != charactersSet.end(); it++)
- {
- cout << *it << " ";
- }
- }
- else
- {
- cout << "В строке не было найдено скобок и цифр.\n";
- }
- }
- void outputSetInFile(set<char> charactersSet)
- {
- cout << "Требуется файл для записи искомого множества.\n";
- string path = takePathToFile();
- ofstream file;
- file.open(path);
- if (!charactersSet.empty())
- {
- for (auto it = charactersSet.begin(); it != charactersSet.end(); it++)
- {
- file << *it << " ";
- }
- }
- else
- {
- file << "В строке не было найдено скобок и цифр.\n";
- }
- file.close();
- cout << "Множество записано в файл!\n";
- }
- int chooseInputOutputMethod()
- {
- 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) && (choice != 1) && (choice != 2))
- {
- cout << "Введите либо 1, либо 2. Ваш выбор: \n";
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return choice;
- }
- string getCharacterSequence(int choice)
- {
- string sequence;
- if (choice == 1)
- {
- sequence = takeCharacterSequenceFromConsole();
- }
- else
- {
- sequence = takeCharacterSequenceFromFile();
- }
- return sequence;
- }
- void outputResult(int choice, set<char> answer)
- {
- if (choice == 1)
- {
- outputSetInConsole(answer);
- }
- else
- {
- outputSetInFile(answer);
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- writeTask();
- cout << "Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ";
- int choice = chooseInputOutputMethod();
- string sequence = getCharacterSequence(choice);
- set<char> answer = getSearchCharactersSet(sequence);
- cout << "Выберите способ вывода данных (1 - через консоль, 2 - с помощью файлов): ";
- choice = chooseInputOutputMethod();
- outputResult(choice, answer);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement