Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- string findInputFile() {
- 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;
- }
- string findOutputFile() {
- bool isNotCorrect;
- string path;
- 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);
- return path;
- }
- string encodeText(string text, string str1, string str2) {
- bool shouldBeChanged;
- for (int i = 0; i < size(text); i++) {
- shouldBeChanged = true;
- for (int j = 0; j < size(str1); j++) {
- if ((str1[j] == text[i]) and shouldBeChanged) {
- text[i] = str2[j];
- shouldBeChanged = false;
- }
- }
- }
- return text;
- }
- string textToEncode(string filePath) {
- string text;
- int letterCount;
- bool isNotCorrect;
- ifstream fin(filePath);
- fin >> text;
- fin.close();
- letterCount = 0;
- for (int i = 0; i < size(text); i++) {
- if (text[i] != ' ') {
- letterCount++;
- }
- }
- if (letterCount == 0) {
- isNotCorrect = true;
- cout << "Проверьте 1 строку в файле и попробуйте еще раз!" << endl;
- }
- if (!isNotCorrect) {
- return text;
- }
- }
- string createStr1(string filePath) {
- string text, line;
- bool isNotCorrect;
- ifstream fin(filePath);
- getline(fin, line);
- fin >> text;
- fin.close();
- isNotCorrect = false;
- for (int i = 0; i < size(text); i++) {
- if ((text[i] == ' ') and !isNotCorrect) {
- isNotCorrect = true;
- cout << "Пробелы во 2 строке!" << endl;
- }
- }
- for (int i = 0; i < size(text); i++) {
- if (!isNotCorrect) {
- for (int j = 0; j < i - 1; j++) {
- if ((text[i] == text[j]) and !isNotCorrect) {
- isNotCorrect = true;
- cout << "Символы не могут повторяться! Проверьте 2 строку и попробуйте еще раз." << endl;
- }
- }
- }
- }
- if (!isNotCorrect) {
- return text;
- }
- }
- string createStr2(string filePath, int length) {
- string text, line;
- bool isNotCorrect;
- ifstream fin(filePath);
- getline(fin, line);
- getline(fin, line);
- fin >> text;
- fin.close();
- isNotCorrect = false;
- for (int i = 0; i < size(text); i++) {
- if ((text[i] == ' ') and !isNotCorrect) {
- isNotCorrect = true;
- cout << "Пробелы в 3 строке!" << endl;
- }
- }
- if ((size(text) != length) and !isNotCorrect) {
- isNotCorrect = true;
- cout << "Длина третьей строки должна совпадать с длиной второй строки!" << endl;
- }
- if (!isNotCorrect) {
- return text;
- }
- }
- void writeStrToFile(string str, string path) {
- ofstream fout(path, fstream::app);
- if (fout.is_open()) {
- fout << str;
- }
- else {
- cout << "Что-то пошло не так." << endl;
- }
- fout.close();
- cout << "Результат записан в файл." << endl;
- }
- void readFileInfo(string filePath) {
- string text, str1, str2;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- text = textToEncode(filePath);
- str1 = createStr1(filePath);
- str2 = createStr2(filePath, size(str1));
- if (text.empty() or str1.empty() or str2.empty()) {
- isNotCorrect = true;
- filePath = findInputFile();
- }
- } while (isNotCorrect);
- cout << encodeText(text, str1, str2) << endl;
- writeStrToFile(encodeText(text, str1, str2), findOutputFile());
- }
- string createTextToEncode() {
- string input;
- bool isNotCorrect;
- bool onlySpacers;
- do {
- isNotCorrect = false;
- onlySpacers = true;
- cout << "Введите текст, который хотите перекодировать" << endl;
- cin >> input;
- if (cin.fail()) {
- isNotCorrect = true;
- cout << "Что-то пошло не так. Попробуйте еще раз." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- for (int i = 0; i < size(input); i++) {
- if ((input[i] != ' ') and (!isNotCorrect)) {
- onlySpacers = false;
- }
- }
- if (onlySpacers) {
- cout << "В тексте не могут быть только пробелы." << endl;
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return input;
- }
- string createEncodingSymbols() {
- string input;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите символы, которые хотите перекодировать." << endl;
- cin >> input;
- if (cin.fail()) {
- isNotCorrect = true;
- cout << "Что - то пошло не так.Попробуйте еще раз." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- for (int i = 0; i < size(input); i++) {
- if (!isNotCorrect) {
- for (int j = 0; j < i - 1; j++) {
- if ((input[i] == input[j]) and !isNotCorrect) {
- isNotCorrect = true;
- cout << "Символы не могут повторяться! Попробуйте еще раз." << endl;
- }
- }
- }
- }
- for (int i = 0; i < size(input); i++) {
- if ((input[i] == ' ') and !isNotCorrect) {
- isNotCorrect = true;
- cout << "Уберите пробелы!" << endl;
- }
- }
- } while (isNotCorrect);
- return input;
- }
- string createSymbolsEncodeTo(int length) {
- string input;
- bool isNotCorrect;
- do {
- cout << "Введите символы, на которые хотите перекодировать." << endl;
- isNotCorrect = false;
- cin >> input;
- if (cin.fail()) {
- isNotCorrect = true;
- cout << "Что-то пошло не так. Попробуйте еще раз." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- if (!isNotCorrect) {
- if (size(input) != length) {
- isNotCorrect = true;
- cout << "Количество символов, на которые перекодируете должно быть такое же, как и кол-во символов, которые вы хотите перекодировать!" << endl;
- }
- }
- for (int i = 0; i < size(input); i++) {
- if ((input[i] == ' ') and !isNotCorrect) {
- isNotCorrect = true;
- cout << "Уберите пробелы!" << endl;
- }
- }
- } while (isNotCorrect);
- return input;
- }
- void info() {
- cout << "ОБРАТИТЕ ВНИМАНИЕ!\nСимволы, которые вы перекодируете, НЕ могут повторяться.\nКоличество символов, в строках с символами перекодировок должно быть одинаковое.\nВ строках с символами перекодировки не может быть пробелов." << endl;
- cout << "/////////////////\nВот пример правильной записи:\n\nаейкнут\nаейкнут\nгорелка" << endl;
- cout << "\nПрограмма выведет: 'горелка'.\n/////////////////" << endl;
- }
- void inputChoice(int consoleOrFile) {
- string str1, str2, text;
- string result;
- if (consoleOrFile == 1) {
- cout << "Прекрасный выбор. Введите необходимую информацию с консоли." << endl;
- info();
- text = createTextToEncode();
- str1 = createEncodingSymbols();
- str2 = createSymbolsEncodeTo(size(str1));
- result = encodeText(text, str1, str2);
- cout << result << endl;
- writeStrToFile(result, findOutputFile());
- }
- else {
- if (consoleOrFile == 2) {
- cout << "Хороший выбор. Я готов найти Ваш файл." << endl;
- info();
- readFileInfo(findInputFile());
- }
- }
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- system("chcp 1251");
- int input;
- bool isNotCorrect;
- cout << "Привет! Это приложение кодирует текст, заменяя символы, которые вы хотите на другие" << endl << endl;
- cout << " Вы хотите продолжить используя консоль, или текстовый файл?" << endl;
- cout << " ВВЕДИТЕ '1' чтобы продолжить, используя консоль. // ВВЕДИТЕ '2' чтобы продолжить, используя текстовый файл." << endl;
- do {
- isNotCorrect = false;
- cin >> input;
- if (cin.fail()) {
- isNotCorrect = true;
- cout << "Упс.. Что-то пошло не так. Попробуйте ещё раз." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- if ((input == 1) or (input == 2)) {
- inputChoice(input);
- }
- else {
- cout << "Числа для ввода только 1 и 2. Это не так сложно!" << endl;
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement