Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <iterator>
- #include <set>
- #include <algorithm>
- #include <fstream>
- using namespace std;
- void outputTask() {
- cout << "Данная задача находит и выводит из введенного множества знаки математических операций и цифры." << endl;
- }
- void outputSet(set<char> charSet) {
- cout << "Введенное множество: " << endl;
- for (char elem : charSet) {
- cout << elem << " ";
- }
- }
- set<char> convertToSet(string str) {
- set <char> charSet = {};
- for (char elem : str) {
- charSet.insert(elem);
- }
- return charSet;
- }
- string inputStringFromConsole() {
- string str;
- bool isCorrect;
- bool isNotCorrect;
- do {
- cout << "Введите элементы множества в строку без пробелов." << endl;
- cin >> str;
- isCorrect = false;
- for (int i = 0; i < size(str); i++) {
- if ((str[i] != ' ') and (!isCorrect)) {
- isCorrect = true;
- }
- }
- if ((size(str) < 1) or (!isCorrect)) {
- cout << "Строка должна иметь хотя бы 1 символ и не иметь пробелы! Повторите попытку." << endl;
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return str;
- }
- string inputStringFromFile(string path) {
- string str;
- bool isCorrect;
- ifstream fin(path);
- cout << "Считывание строки..." << endl;
- fin >> str;
- fin.close();
- isCorrect = false;
- for (int i = 0; i < size(str); i++) {
- if ((str[i] != ' ') and (!isCorrect)) {
- isCorrect = true;
- }
- }
- if ((size(str) < 1) or (!isCorrect)) {
- cout << "Строка должна иметь хотя бы 1 символ и не иметь пробелы! Введите данные с клавиатуры." << endl;
- str = inputStringFromConsole();
- }
- return str;
- }
- string choicePath() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь файла: " << endl;
- cin >> path;
- ifstream fin(path);
- if (fin.is_open() and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
- cout << "Файл успешно открыт!" << endl;
- }
- else {
- cout << "Ошибка открытия файла!" << endl;
- isNotCorrect = true;
- }
- fin.close();
- } while (isNotCorrect);
- return path;
- }
- set<char> inputFromFile() {
- string path;
- string stringOfElements;
- set<char> charSet = {};
- cout << "При вводе из файла учтите, что в файле элементы множества должны быть записаны в строку без пробелов." << endl;
- path = choicePath();
- stringOfElements = inputStringFromFile(path);
- charSet = convertToSet(stringOfElements);
- return charSet;
- }
- set<char> inputFromConsole() {
- set<char> charSet = {};
- string strOfElements;
- strOfElements = inputStringFromConsole();
- charSet = convertToSet(strOfElements);
- return charSet;
- }
- set<char> choiceInput() {
- set<char> charSet;
- int choice;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Выберите, откуда будут вводиться данные. Введите 0, если с консоли; 1, если с файла" << endl;
- cin >> choice;
- if (cin.fail() or ((choice != 0) and (choice != 1))) {
- cout << "Неверный ввод данных!" << endl;
- isNotCorrect = true;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- if (choice == 0) {
- charSet = inputFromConsole();
- }
- else {
- charSet = inputFromFile();
- }
- outputSet(charSet);
- return charSet;
- }
- set<char> calculateSet(set<char> charSet) {
- set<char> symbols;
- set<char> resultSet;
- symbols.insert({ '+', '-', '*', '/' });
- for (char digit = '0'; digit <= '9'; ++digit) {
- symbols.insert(digit);
- }
- set_intersection(charSet.begin(), charSet.end(), symbols.begin(), symbols.end(), inserter(resultSet, resultSet.begin()));
- return resultSet;
- }
- void outputAnswer(set<char> charSet) {
- bool isNotCorrect;
- string path;
- if (size(charSet) == 0) {
- cout << "\nЗнаки мат.операций и цифры не содержатся в множестве!" << endl;
- }
- else {
- cout << "\nЦифры и знаки математических операций, встретившиеся в множестве: " << endl;
- for (char elem : charSet) {
- cout << elem << " ";
- }
- }
- do {
- isNotCorrect = false;
- cout << "\nВведите путь файла для вывода: " << endl;
- cin >> path;
- ofstream fout(path, fstream::app);
- if ((fout.is_open()) and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
- cout << "Файл успешно открыт!" << endl;
- fout.close();
- }
- else {
- cout << "Ошибка открытия файла" << endl;
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- ofstream fout(path, fstream::app);
- if (size(charSet) == 0) {
- fout << "\nЗнаки мат.операций и цифры не содержатся в множестве!" << endl;
- }
- else {
- fout << "\nЦифры и знаки математических операций, встретившиеся в множестве: " << endl;
- for (char elem : charSet) {
- fout << elem << " ";
- }
- }
- fout.close();
- cout << "Ответ записан в файл." << endl;
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- system("chcp 1251");
- set <char> charSet;
- outputTask();
- charSet = choiceInput();
- charSet = calculateSet(charSet);
- outputAnswer(charSet);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement