Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <windows.h>
- using namespace std;
- void printTask() {
- cout << "Данный текст на русском языке 'перекодировать' в соответсвии с таблицей перекодировки, заданной двумя строками." << endl;
- };
- int askUserAboutInput() {
- int answer;
- bool isCorrect;
- cout << "Если хотите ввести данные с консоли - введите 0, считать с файла - 1" << endl;
- do {
- isCorrect = true;
- cin >> answer;
- if (cin.fail())
- {
- isCorrect = false;
- cin.clear();
- while (cin.get() != '\n');
- cout << "Проверьте корректность введенных данных" << endl;
- }
- if (isCorrect && cin.get() != '\n')
- {
- cin.clear();
- isCorrect = false;
- while (cin.get() != '\n');
- cout << "Проверьте корректность введенных данных" << endl;
- }
- if (isCorrect && (answer > 1 || answer < 0))
- {
- isCorrect = false;
- cout << "Если хотите ввести данные с консоли - введите 0, считать с файла - 1" << endl;
- }
- } while (!isCorrect);
- return answer;
- }
- int askUserAboutOutput() {
- int answer;
- bool isCorrect;
- cout << "Если хотите записать результат в файл - введите 1, нет - введите 0" << endl;
- do {
- isCorrect = true;
- cin >> answer;
- if (cin.fail())
- {
- isCorrect = false;
- cin.clear();
- while (cin.get() != '\n');
- cout << "Проверьте корректность введенных данных" << endl;
- }
- if (isCorrect && cin.get() != '\n')
- {
- cin.clear();
- isCorrect = false;
- while (cin.get() != '\n');
- cout << "Проверьте корректность введенных данных" << endl;
- }
- if (isCorrect && (answer > 1 || answer < 0))
- {
- isCorrect = false;
- cout << "Если хотите записать результат в файл - введите 1, нет - введите 0" << endl;
- }
- } while (!isCorrect);
- return answer;
- }
- string getPath() {
- bool isCorrect;
- string path;
- cout << "Введите полный путь к файлу" << endl;
- do {
- isCorrect = true;
- cin >> path;
- ifstream file(path);
- if (!file.is_open())
- {
- cout << "Ошибка! Проверьте правильность введенной директории" << endl;
- isCorrect = false;
- }
- } while (!isCorrect);
- return path;
- }
- string getTextFromConsole(int const sizeText) {
- bool isCorrect;
- string text;
- do {
- isCorrect = true;
- cout << "Введите текст:" << endl;
- getline(cin, text);
- if (text.size() > sizeText)
- {
- isCorrect = false;
- cout << "Ошибка. Вы вышли за диапазон вводимых элементов" << endl;
- }
- } while (!isCorrect);
- return text;
- }
- string getFirstStringFromConsole() {
- bool isCorrect;
- string st1;
- do {
- isCorrect = true;
- cout << "Введите первую строку: ";
- cin >> st1;
- if (isCorrect && cin.get() != '\n')
- {
- cin.clear();
- isCorrect = false;
- while (cin.get() != '\n');
- cout << "Проверьте наличие на пробелы" << endl;
- }
- } while (!isCorrect);
- return st1;
- }
- int getSizeForString(string st1) {
- int sizeSet;
- sizeSet = st1.size();
- return sizeSet;
- }
- string getSecondStringFromConsole(int sizeSet) {
- bool isCorrect;
- string st2;
- do
- {
- isCorrect = true;
- cout << "Введите вторую строку: ";
- cin >> st2;
- if (st2.size() != sizeSet)
- {
- isCorrect = false;
- cout << "Ошибка. Количество элементов в обеих строках должна быть одинаковы" << endl;
- }
- if (isCorrect && cin.get() != '\n')
- {
- cin.clear();
- isCorrect = false;
- while (cin.get() != '\n');
- cout << "Проверьте наличие на пробелы" << endl;
- }
- } while (!isCorrect);
- return st2;
- }
- string getTextFromFile(string path, int const sizeText) {
- bool isCorrect;
- string text;
- ifstream fin;
- fin.open(path);
- getline(fin, text);
- if (text.size() > sizeText)
- {
- cout << "Ошибка. Вы вышли за диапазон вводимых элементов" << endl;
- text = getTextFromConsole(sizeText);
- }
- fin.close();
- return text;
- }
- string getFirstStringFromFile(string path) {
- string st1;
- ifstream fin;
- fin.open(path);
- fin >> st1;
- fin.close();
- return st1;
- }
- string getSecondStringFromFile(string path, int sizeSet) {
- string st2;
- ifstream fin;
- fin.open(path);
- fin >> st2;
- if (st2.size() != sizeSet)
- {
- fin.clear();
- cout << "Ошибка. Количество элементов в обеих строках должна быть одинаковы" << endl;
- st2 = getSecondStringFromConsole(sizeSet);
- }
- fin.close();
- return st2;
- }
- string transcodeText(string newtext,string text, string st1, string st2) {
- for (int i = 0; i < text.size(); i++)
- {
- for (int j = 0; j < st1.size(); j++)
- {
- if (text[i] == st1[j])
- {
- newtext[i] = st2[j];
- }
- }
- }
- return newtext;
- }
- void outputToConsole(string newtext) {
- cout << "Перекодированный текст: " << newtext << endl;
- }
- void outputToFile(string path, string newtext) {
- ofstream fout;
- fout.open(path);
- fout << "Перекодированный текст: " << newtext << endl;
- fout.close();
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int sizeSet, answer;
- int const sizeText = 100;
- string st1, st2;
- string text, newtext;
- string path;
- printTask();
- answer = askUserAboutInput();
- if (answer == 1)
- {
- path = getPath();
- text = getTextFromFile(path, sizeText);
- st1 = getFirstStringFromFile(path);
- sizeSet = getSizeForString(st1);
- st2 = getSecondStringFromFile(path, sizeSet);
- }
- else
- {
- text = getTextFromConsole(sizeText);
- st1 = getFirstStringFromConsole();
- sizeSet = getSizeForString(st1);
- st2 = getSecondStringFromConsole(sizeSet);
- }
- newtext = text;
- newtext = transcodeText(newtext, text, st1, st2);
- outputToConsole(newtext);
- answer = askUserAboutOutput();
- if (answer == 1)
- {
- path = getPath();
- outputToFile(path, newtext);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement