Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <windows.h>
- #include <string>
- #include <set>
- using namespace std;
- void printInfo() {
- cout << "Программа описывает множество гласных и согласных букв русского алфавита и формирует множество гласных и согласных букв из предложения\n";
- }
- set<char> getSetInText(set<char> stAlpha, string text)
- {
- set<char> setInText;
- for (int i = 0; i < text.length(); i++)
- {
- if (stAlpha.find(text[i]) != stAlpha.end())
- {
- setInText.insert(text[i]);
- }
- }
- return setInText;
- }
- string input(bool& isIncorrect) {
- string str;
- getline(cin, str);
- if (str.empty()) {
- isIncorrect = true;
- cerr << "Ошибка. Строка не может быть пустой.\n";
- }
- return str;
- }
- string readTextFromConsole() {
- string text;
- bool isIncorrect;
- do {
- isIncorrect = false;
- cout << "Введите строку:\n";
- text = input(isIncorrect);
- } while (isIncorrect);
- return text;
- }
- bool checkExtension(string path) {
- return path.substr(path.length() - 4) == ".txt";
- }
- string readPath() {
- ifstream fin;
- string path;
- bool isIncorrect;
- cout << "Введите путь к файлу:\n";
- do {
- isIncorrect = false;
- cin >> path;
- fin.open(path);
- if (!fin.is_open() || fin.fail()) {
- isIncorrect = true;
- cout << "Файл недоступен. Повторите ввод:\n";
- }
- else if (!checkExtension(path)) {
- isIncorrect = true;
- cout << "Неправильное расширение файла. Повторите ввод:\n";
- }
- fin.close();
- while (cin.get() != '\n');
- } while (isIncorrect);
- return path;
- }
- string readTextFromFile(ifstream& fin) {
- string text;
- getline(fin, text);
- if (text.empty()) {
- cout << "Ошибка. Файл пуст. ";
- }
- return text;
- }
- string readFile() {
- string path, text;
- path = readPath();
- ifstream fin(path);
- text = readTextFromFile(fin);
- fin.close();
- return text;
- }
- string chooseAction() {
- string input;
- bool isIncorrect;
- do {
- isIncorrect = false;
- cin >> input;
- if ((input != "console") && (input != "file")) {
- isIncorrect = true;
- cout << "Ошибка. Введите 'console' или 'file':\n";
- }
- } while (isIncorrect);
- return input;
- }
- string chooseInput() {
- string option, text;
- cout << "Выберите способ ввода данных.\n" <<
- "Введите 'console', если хотите ввести данные через консоль.\n" <<
- "Введите 'file', если хотите передать данные из файла.\n";
- option = chooseAction();
- while (cin.get() != '\n');
- if (option == "console") {
- text = readTextFromConsole();
- }
- else
- text = readFile();
- return text;
- }
- void writeConsole(string text, const set<char> vowels, const set<char> consonants) {
- int countAlphaVowels = 0;
- int countAlphaConsonants = 0;
- set<char> vowelsInText;
- set<char> consonantsInText;
- vowelsInText = getSetInText(vowels, text);
- countAlphaVowels = vowelsInText.size();
- if (countAlphaVowels != 0)
- {
- cout << "\nЭлементы в множестве гласных букв: " << endl;
- for (int i : vowelsInText)
- {
- cout << (char)i << " ";
- }
- cout << "\nКоличество элементов в множестве гласных букв: " << countAlphaVowels << "\n";
- }
- else
- {
- cout << "\nВ множестве гласных букв нет элементов.\n";
- }
- consonantsInText = getSetInText(consonants, text);
- countAlphaConsonants = consonantsInText.size();
- if (countAlphaConsonants != 0)
- {
- cout << "\nЭлементы в множестве согласных букв: " << endl;
- for (int i : consonantsInText)
- {
- cout << (char)i << " ";
- }
- cout << "\nКоличество элементов в множестве согласных букв: " << countAlphaConsonants << "\n";
- }
- else
- {
- cout << "\nВ множестве согласных букв нет элементов.\n";
- }
- }
- void writeFile(string text, const set<char> vowels, const set<char> consonants) {
- string path;
- bool isIncorrect;
- do {
- isIncorrect = true;
- path = readPath();
- ofstream fout(path);
- if (!fout.is_open()) {
- cout << "Ошибка. Файл закрыт для записи. ";
- isIncorrect = false;
- }
- else {
- int countAlphaVowels = 0;
- int countAlphaConsonants = 0;
- set<char> vowelsInText;
- set<char> consonantsInText;
- vowelsInText = getSetInText(vowels, text);
- countAlphaVowels = vowelsInText.size();
- if (countAlphaVowels != 0)
- {
- fout << "Элементы в множестве гласных букв: " << endl;
- for (int i : vowelsInText)
- {
- fout << (char)i << " ";
- }
- fout << "\nКоличество элементов в множестве гласных букв: " << countAlphaVowels << "\n";
- }
- else
- {
- fout << "В множестве гласных букв нет элементов.\n";
- }
- consonantsInText = getSetInText(consonants, text);
- countAlphaConsonants = consonantsInText.size();
- if (countAlphaConsonants != 0)
- {
- fout << "Элементы в множестве согласных букв: " << endl;
- for (int i : consonantsInText)
- {
- fout << (char)i << " ";
- }
- fout << "\nКоличество элементов в множестве согласных букв: " << countAlphaConsonants << "\n";
- }
- else
- {
- fout << "В множестве согласных букв нет элементов.\n";
- }
- cout << "Информация успешно записана в файл.";
- }
- fout.close();
- } while (!isIncorrect);
- }
- void chooseOutput(string text, const set<char> vowels, const set<char> consonants) {
- string option;
- cout << "Выберите способ вывода результата.\n" <<
- "Введите 'console', если хотите вывести результат через консоль.\n" <<
- "Введите 'file', если хотите передать результат в файл.\n";
- option = chooseAction();
- if (option == "console")
- writeConsole(text, vowels, consonants);
- else
- writeFile(text, vowels, consonants);
- }
- int main() {
- system("chcp 1251");
- const set<char> vowels{ 'а', 'у','о', 'и', 'э' ,'ы','я' , 'ю', 'ё', 'е' };
- const set<char> consonants{ 'б','в', 'г', 'д', 'ж', 'з', 'й', 'л', 'м',
- 'н', 'р','к', 'п', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ' };
- string text = "";
- printInfo();
- text = chooseInput();
- chooseOutput(text, vowels, consonants);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement