Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <stdlib.h>
- #include <set>
- using namespace std;
- int chooseWay(const int);
- void inputText(string&, const int);
- void inputFromFile(string&, string&);
- string inputFileName(const int);
- void inputFromConsole(string&);
- void searchNumsAndSigns(set<char>&, set<char>&, string&);
- void outputResult(set<char>, const int);
- void outputInFile(string&, set<char>);
- void outputInConsole(set<char>);
- const int INPUT = 1,
- OUTPUT = 2;
- int main()
- {
- system("chcp 1251 > nul");
- string text;
- int choice;
- set<char> numsAndSigns, resultSet;
- numsAndSigns = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '/', '*'};
- cout << "Программа выводит множество содержащихся в введенном тексте цифр и знаков препинания\n";
- choice = chooseWay(INPUT);
- inputText(text, choice);
- searchNumsAndSigns(resultSet, numsAndSigns, text);
- choice = chooseWay(OUTPUT);
- outputResult(resultSet, choice);
- return 0;
- }
- int chooseWay(const int IorOput)
- {
- int choice;
- bool isNotCorrect;
- switch (IorOput) {
- case INPUT:
- cout << "Выберите вариант ввода:\n";
- cout << "1.Данные вводятся из текстового файла.\n";
- cout << "2.Данные вводятся через консоль.\n";
- break;
- default:
- cout << "Выберите вариант вывода:\n";
- cout << "1.Данные выводятся в текстовый файл.\n";
- cout << "2.Данные выводятся в консоль.\n";
- }
- do {
- cin >> choice;
- if (cin.fail() || cin.get() != '\n') {
- isNotCorrect = true;
- cout << "Ошибка ввода. Выберите вариант 1 или 2." << '\n';
- cin.clear();
- while (cin.get() != '\n');
- }
- else if ((choice < 1) || (choice > 2)) {
- cout << "Ошибка ввода. Выберите вариант 1 или 2." << '\n';
- isNotCorrect = true;
- }
- else
- isNotCorrect = false;
- } while (isNotCorrect);
- return choice;
- }
- void inputText(string& text, const int choice)
- {
- text = "";
- switch (choice) {
- case 1: {
- string fileName;
- fileName = inputFileName(INPUT);
- inputFromFile(text, fileName);
- break;
- }
- default:
- inputFromConsole(text);
- }
- }
- string inputFileName(const int inOrOut)
- {
- string fileName;
- switch (inOrOut) {
- case INPUT: {
- cout << "Введите имя файла, из которого будут вводиться данные:\n";
- ifstream in;
- do {
- getline(cin, fileName);
- if (fileName.ends_with(".txt")) {
- in.open(fileName);
- if (in.is_open()) {
- in.close();
- return fileName;
- }
- else
- cout << "Невозможно открыть файл с таким именем! Повторите ввод имени файла:\n";
- }
- else
- cout << "Файл должен иметь расширение .txt! Повторите ввод имени файла:\n";
- } while (true);
- break;
- }
- default: {
- cout << "Введите имя файла, в который будут выводиться полученные данные (если файл вводится без расширения, то ему автоматически будет добавлено расширение .txt):\n";
- ofstream out;
- do {
- getline(cin, fileName);
- if (fileName.find(".") == string::npos)
- fileName = fileName + ".txt";
- out.open(fileName);
- if (out.is_open()) {
- out.close();
- return fileName;
- }
- else
- cout << "Невозможно открыть или создать файл с таким именем! Повторите ввод имени файла:\n";
- } while (true);
- }
- }
- }
- void inputFromConsole(string& text)
- {
- cout << "Введите строку для обработки:\n";
- getline(cin, text);
- }
- void searchNumsAndSigns(set<char>& resultSet, set<char>& numsAndSigns, string& text)
- {
- for (int i = 0; i < text.length(); i++)
- if (numsAndSigns.count(text[i]))
- resultSet.insert(text[i]);
- }
- void inputFromFile(string& text, string& fileName)
- {
- ifstream in;
- string fileString;
- in.open(fileName);
- while (!in.eof()) {
- getline(in, fileString);
- text = text + fileString;
- }
- }
- void outputResult(set<char> resultSet, const int choice)
- {
- switch (choice) {
- case 1: {
- string fileName;
- fileName = inputFileName(OUTPUT);
- outputInFile(fileName, resultSet);
- cout << "Искомые данные выведены в файл " << fileName;
- break;
- }
- default:
- outputInConsole(resultSet);
- }
- }
- void outputInFile(string& fileName, set<char> resultSet)
- {
- ofstream out;
- out.open(fileName);
- for (char i : resultSet) {
- out << i << ' ';
- }
- out.close();
- }
- void outputInConsole(set<char> resultSet)
- {
- cout << "Искомое множество:\n";
- for (char i : resultSet) {
- cout << i << ' ';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement