Advertisement
dxvmxnd

Untitled

Nov 22nd, 2023
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. string findInputFile() {
  8. string path;
  9. bool isNotCorrect;
  10.  
  11. do {
  12. isNotCorrect = false;
  13. cout << "Введите путь файла с данными: " << endl;
  14. cin >> path;
  15. ifstream fin(path);
  16. 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] == '.'))) {
  17. cout << "Файл успешно открыт!" << endl;
  18. }
  19. else {
  20. cout << "Ошибка открытия файла!" << endl;
  21. isNotCorrect = true;
  22. }
  23. fin.close();
  24. } while (isNotCorrect);
  25.  
  26. return path;
  27. }
  28.  
  29. string findOutputFile() {
  30. bool isNotCorrect;
  31. string path;
  32.  
  33. do {
  34. isNotCorrect = false;
  35. cout << "\nВведите путь файла для вывода: " << endl;
  36. cin >> path;
  37. ofstream fout(path, fstream::app);
  38. 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] == '.'))) {
  39. cout << "Файл успешно открыт!" << endl;
  40. fout.close();
  41. }
  42. else {
  43. cout << "Ошибка открытия файла" << endl;
  44. isNotCorrect = true;
  45. }
  46. } while (isNotCorrect);
  47.  
  48. return path;
  49. }
  50.  
  51. string encodeText(string text, string str1, string str2) {
  52. bool shouldBeChanged;
  53.  
  54. for (int i = 0; i < size(text); i++) {
  55. shouldBeChanged = true;
  56. for (int j = 0; j < size(str1); j++) {
  57. if ((str1[j] == text[i]) and shouldBeChanged) {
  58. text[i] = str2[j];
  59. shouldBeChanged = false;
  60. }
  61. }
  62. }
  63.  
  64.  
  65. return text;
  66. }
  67.  
  68. string textToEncode(string filePath) {
  69. string text;
  70. int letterCount;
  71. bool isNotCorrect;
  72.  
  73. ifstream fin(filePath);
  74. fin >> text;
  75. fin.close();
  76.  
  77. letterCount = 0;
  78. for (int i = 0; i < size(text); i++) {
  79. if (text[i] != ' ') {
  80. letterCount++;
  81. }
  82. }
  83.  
  84. if (letterCount == 0) {
  85. isNotCorrect = true;
  86. cout << "Проверьте 1 строку в файле и попробуйте еще раз!" << endl;
  87. }
  88.  
  89. if (!isNotCorrect) {
  90. return text;
  91. }
  92. }
  93.  
  94. string createStr1(string filePath) {
  95. string text, line;
  96. bool isNotCorrect;
  97.  
  98. ifstream fin(filePath);
  99. getline(fin, line);
  100. fin >> text;
  101. fin.close();
  102.  
  103. isNotCorrect = false;
  104. for (int i = 0; i < size(text); i++) {
  105. if ((text[i] == ' ') and !isNotCorrect) {
  106. isNotCorrect = true;
  107. cout << "Пробелы во 2 строке!" << endl;
  108. }
  109. }
  110.  
  111.  
  112. for (int i = 0; i < size(text); i++) {
  113. if (!isNotCorrect) {
  114. for (int j = 0; j < i - 1; j++) {
  115. if ((text[i] == text[j]) and !isNotCorrect) {
  116. isNotCorrect = true;
  117. cout << "Символы не могут повторяться! Проверьте 2 строку и попробуйте еще раз." << endl;
  118. }
  119. }
  120. }
  121. }
  122.  
  123. if (!isNotCorrect) {
  124. return text;
  125. }
  126.  
  127. }
  128.  
  129. string createStr2(string filePath, int length) {
  130. string text, line;
  131. bool isNotCorrect;
  132.  
  133. ifstream fin(filePath);
  134. getline(fin, line);
  135. getline(fin, line);
  136. fin >> text;
  137. fin.close();
  138.  
  139. isNotCorrect = false;
  140. for (int i = 0; i < size(text); i++) {
  141. if ((text[i] == ' ') and !isNotCorrect) {
  142. isNotCorrect = true;
  143. cout << "Пробелы в 3 строке!" << endl;
  144. }
  145. }
  146.  
  147. if ((size(text) != length) and !isNotCorrect) {
  148. isNotCorrect = true;
  149. cout << "Длина третьей строки должна совпадать с длиной второй строки!" << endl;
  150. }
  151.  
  152. if (!isNotCorrect) {
  153. return text;
  154. }
  155.  
  156. }
  157.  
  158. void writeStrToFile(string str, string path) {
  159.  
  160. ofstream fout(path, fstream::app);
  161. if (fout.is_open()) {
  162. fout << str;
  163. }
  164. else {
  165. cout << "Что-то пошло не так." << endl;
  166. }
  167.  
  168. fout.close();
  169. cout << "Результат записан в файл." << endl;
  170. }
  171.  
  172. void readFileInfo(string filePath) {
  173. string text, str1, str2;
  174. bool isNotCorrect;
  175.  
  176. do {
  177. isNotCorrect = false;
  178. text = textToEncode(filePath);
  179. str1 = createStr1(filePath);
  180. str2 = createStr2(filePath, size(str1));
  181.  
  182. if (text.empty() or str1.empty() or str2.empty()) {
  183. isNotCorrect = true;
  184. filePath = findInputFile();
  185. }
  186. } while (isNotCorrect);
  187.  
  188. cout << encodeText(text, str1, str2) << endl;
  189. writeStrToFile(encodeText(text, str1, str2), findOutputFile());
  190. }
  191.  
  192. string createTextToEncode() {
  193. string input;
  194. bool isNotCorrect;
  195. bool onlySpacers;
  196.  
  197. do {
  198. isNotCorrect = false;
  199. onlySpacers = true;
  200. cout << "Введите текст, который хотите перекодировать" << endl;
  201. cin >> input;
  202. if (cin.fail()) {
  203. isNotCorrect = true;
  204. cout << "Что-то пошло не так. Попробуйте еще раз." << endl;
  205. cin.clear();
  206. while (cin.get() != '\n');
  207. }
  208.  
  209. for (int i = 0; i < size(input); i++) {
  210. if ((input[i] != ' ') and (!isNotCorrect)) {
  211. onlySpacers = false;
  212. }
  213. }
  214.  
  215. if (onlySpacers) {
  216. cout << "В тексте не могут быть только пробелы." << endl;
  217. isNotCorrect = true;
  218. }
  219. } while (isNotCorrect);
  220.  
  221. return input;
  222. }
  223.  
  224. string createEncodingSymbols() {
  225. string input;
  226. bool isNotCorrect;
  227.  
  228. do {
  229. isNotCorrect = false;
  230. cout << "Введите символы, которые хотите перекодировать." << endl;
  231. cin >> input;
  232. if (cin.fail()) {
  233. isNotCorrect = true;
  234. cout << "Что - то пошло не так.Попробуйте еще раз." << endl;
  235. cin.clear();
  236. while (cin.get() != '\n');
  237. }
  238.  
  239. for (int i = 0; i < size(input); i++) {
  240. if (!isNotCorrect) {
  241. for (int j = 0; j < i - 1; j++) {
  242. if ((input[i] == input[j]) and !isNotCorrect) {
  243. isNotCorrect = true;
  244. cout << "Символы не могут повторяться! Попробуйте еще раз." << endl;
  245. }
  246. }
  247. }
  248. }
  249.  
  250. for (int i = 0; i < size(input); i++) {
  251. if ((input[i] == ' ') and !isNotCorrect) {
  252. isNotCorrect = true;
  253. cout << "Уберите пробелы!" << endl;
  254. }
  255. }
  256. } while (isNotCorrect);
  257.  
  258. return input;
  259. }
  260.  
  261. string createSymbolsEncodeTo(int length) {
  262. string input;
  263. bool isNotCorrect;
  264.  
  265. do {
  266. cout << "Введите символы, на которые хотите перекодировать." << endl;
  267. isNotCorrect = false;
  268. cin >> input;
  269. if (cin.fail()) {
  270. isNotCorrect = true;
  271. cout << "Что-то пошло не так. Попробуйте еще раз." << endl;
  272. cin.clear();
  273. while (cin.get() != '\n');
  274. }
  275. if (!isNotCorrect) {
  276. if (size(input) != length) {
  277. isNotCorrect = true;
  278. cout << "Количество символов, на которые перекодируете должно быть такое же, как и кол-во символов, которые вы хотите перекодировать!" << endl;
  279.  
  280. }
  281. }
  282. for (int i = 0; i < size(input); i++) {
  283. if ((input[i] == ' ') and !isNotCorrect) {
  284. isNotCorrect = true;
  285. cout << "Уберите пробелы!" << endl;
  286. }
  287. }
  288. } while (isNotCorrect);
  289.  
  290. return input;
  291. }
  292.  
  293. void info() {
  294. cout << "ОБРАТИТЕ ВНИМАНИЕ!\nСимволы, которые вы перекодируете, НЕ могут повторяться.\nКоличество символов, в строках с символами перекодировок должно быть одинаковое.\nВ строках с символами перекодировки не может быть пробелов." << endl;
  295. cout << "/////////////////\nВот пример правильной записи:\n\nаейкнут\nаейкнут\nгорелка" << endl;
  296. cout << "\nПрограмма выведет: 'горелка'.\n/////////////////" << endl;
  297. }
  298.  
  299. void inputChoice(int consoleOrFile) {
  300. string str1, str2, text;
  301. string result;
  302.  
  303. if (consoleOrFile == 1) {
  304. cout << "Прекрасный выбор. Введите необходимую информацию с консоли." << endl;
  305. info();
  306. text = createTextToEncode();
  307. str1 = createEncodingSymbols();
  308. str2 = createSymbolsEncodeTo(size(str1));
  309. result = encodeText(text, str1, str2);
  310. cout << result << endl;
  311. writeStrToFile(result, findOutputFile());
  312. }
  313. else {
  314. if (consoleOrFile == 2) {
  315. cout << "Хороший выбор. Я готов найти Ваш файл." << endl;
  316. info();
  317. readFileInfo(findInputFile());
  318. }
  319. }
  320.  
  321. }
  322.  
  323. int main() {
  324. setlocale(LC_ALL, "Rus");
  325. system("chcp 1251");
  326.  
  327. int input;
  328. bool isNotCorrect;
  329.  
  330. cout << "Привет! Это приложение кодирует текст, заменяя символы, которые вы хотите на другие" << endl << endl;
  331. cout << " Вы хотите продолжить используя консоль, или текстовый файл?" << endl;
  332. cout << " ВВЕДИТЕ '1' чтобы продолжить, используя консоль. // ВВЕДИТЕ '2' чтобы продолжить, используя текстовый файл." << endl;
  333.  
  334. do {
  335. isNotCorrect = false;
  336. cin >> input;
  337. if (cin.fail()) {
  338. isNotCorrect = true;
  339. cout << "Упс.. Что-то пошло не так. Попробуйте ещё раз." << endl;
  340. cin.clear();
  341. while (cin.get() != '\n');
  342. }
  343. if ((input == 1) or (input == 2)) {
  344. inputChoice(input);
  345. }
  346. else {
  347. cout << "Числа для ввода только 1 и 2. Это не так сложно!" << endl;
  348. isNotCorrect = true;
  349. }
  350.  
  351. } while (isNotCorrect);
  352.  
  353.  
  354.  
  355. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement