Advertisement
dxvmxnd

Untitled

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