Advertisement
hurmawe

courswork_for_Andrew

May 18th, 2022 (edited)
358
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>//стандартная библиотека вывода и ввода информации
  2. #include <vector>//добавление vector
  3. #include <fstream>//работа с файлами
  4. #include <string>//работа со строками
  5. #include <Windows.h>//локализатор
  6.  
  7. using namespace std;//указываем где находятся большиснвто используем функции cin,cout,ofstream,endl а также класс string, vector и другие
  8.  
  9. //объявляем будущие функции
  10. void mix_rand();//функция перемешивания всех элементов
  11. void mix_spot();//функция точечного(двух элементов) перемешивания
  12. void mix();//функция которая определяет какое будет использованно перемешивания
  13. void create_file();// функция создания и заполнения файла
  14.  
  15.  
  16. //реализация функция перемешивания всех элементов
  17. void mix_rand()
  18. {
  19.     vector<string> array;//массив под слова
  20.     string buff;//буфер для чтения слов
  21.     string name_file;//название файла
  22.  
  23.     cout << "Вы выбрали перемешать все элементы" << endl;
  24.     cout << "Введите имя файла" << endl;
  25.  
  26.     cin >> name_file;//запись имени файла
  27.     ifstream fi(name_file);//открытие файла для чтения
  28.  
  29.     if (!fi.is_open())//проверка открытия
  30.     {
  31.         cout << "Ошибка открытия файлов" << endl;
  32.     }
  33.     else
  34.     {
  35.         while (fi >> buff)//пока есть слова в файле записываем их buff  и кладем в массив
  36.         {
  37.             array.push_back(buff);
  38.         }
  39.         fi.close();//закрытие файла
  40.         cout << "Мешаем..." << endl << ".." << endl << "." << endl;//интерактив(советую удалить)
  41.         for (int i = 0; i < 100; i++)//перемешавние элементов
  42.         {
  43.             //мы рандомно выбираем элементы которые будет менять местами
  44.             int j = rand() % array.size();//генерируем рандомное число от 0 до последнего элемента
  45.             int k = rand() % array.size();//генерируем рандомное число от 0 до последнего элемента
  46.             swap(array[j], array[k]);//получившиеся слова меняем местами
  47.         }
  48.         ofstream fo(name_file);//открытие файла для записи
  49.         for (int i = 0; i < array.size(); i++)//записываем все элементы
  50.         {
  51.             fo << array[i] + " ";//слова плюс пробел для хорошего чтения
  52.             if (i == 9)
  53.                 fo << endl;//раз в 10 слов переводим строку, чтобы легче читалось
  54.         }
  55.         fo.close();//закрытие файла
  56.     }
  57.     cout << "Перемешивание выполнено" << endl << endl;//информирование об успешности
  58. }
  59.  
  60. //реализация функция точечного(двух элементов) перемешивания
  61. void mix_spot()
  62. {
  63.     string str;//переменную под файл. в ней будут храниться все слова файла. это сделано ради удобства работы с функциями find() и replace()
  64.     string buff;//буфер для чтения слов
  65.     string name_file;//название файла
  66.  
  67.     cout << "Вы выбрали поменять два слова местами" << endl;
  68.  
  69.     while (1)
  70.     {
  71.         cout << "Введите имя файла" << endl;
  72.  
  73.         cin >> name_file;//запись имени файла
  74.         ifstream fi(name_file);//открытие файла для чтения
  75.  
  76.         if (!fi.is_open())//проверка открытия
  77.         {
  78.             cout << "Ошибка открытия файлов" << endl;
  79.         }
  80.         else
  81.         {
  82.             while (getline(fi, buff))//записываем по линиям
  83.             {
  84.                 str += buff +"\n";//записываем все в нашу строку для дальнейших действий, добавляем '\n' чтобы не потерять красные строки
  85.             }
  86.             fi.close();//закрытие файла
  87.  
  88.             string name1;//переменное под 1 слово которое будем менять
  89.             int pos1 = 0;//переменная для поиска позиции слова
  90.             string name2;//переменное под 2 слово которое будем менять
  91.             int pos2 = 0;//переменная для поиска позиции слова
  92.            
  93.             cout << "Введите первое слово" << endl;
  94.             cin >> name1;//запись слова 1
  95.             cout << "Введите второе слово" << endl;
  96.             cin >> name2;//запись слова 2
  97.  
  98.             //ищем слова в нашей строке
  99.             pos1 = str.find(name1, pos1);
  100.             pos2 = str.find(name2, pos2);
  101.  
  102.             if (pos1 == -1 || pos2 == -1)//если не нашли слова заканчиваем
  103.             {
  104.                 cout << "Ваши слова не найдены" << endl;
  105.                 return;//выход из функции
  106.             }
  107.             else
  108.             {
  109.                 cout << "Мешаем..." << endl << ".." << endl << "." << endl;//интерактив(реально лучше удали)
  110.                 str.replace(pos1, name1.length(), name2);//заменяем второе слово на первое
  111.                 str.replace(pos2, name2.length(), name1);//заменяем первое слово на второе
  112.             }
  113.            
  114.             ofstream fo(name_file);//открытие файла для записи
  115.             fo << str;//вкладываем получившую строку
  116.             fo.close();//закрытие файла
  117.             break;//выход из цикла
  118.         }
  119.     }
  120.     cout << "Перемешивание выполнено" << endl << endl;
  121.  
  122. }
  123. //реализация функция которая определяет какое будет использованно перемешивания
  124. void mix()
  125. {
  126.     cout << "Вы выбрали перемешивание слов в файле" << endl;
  127.  
  128.     int switcher=0;//переменная отвечающая за команду введенную пользователем
  129.  
  130.     cout << "Выберите метод сортировки" << endl
  131.         << "1)перемешать все элементы"    << endl
  132.         << "2)поменять два слова местами" << endl;
  133.  
  134.     while (1)
  135.     {
  136.         cin >> switcher;//читаем команду
  137.         if (switcher == 1)//перемешивание всех элементов
  138.         {
  139.             mix_rand();
  140.             break;
  141.         }
  142.         else if (switcher == 2)//перемешивание конкретных элементов
  143.         {
  144.             mix_spot();
  145.             break;
  146.         }
  147.         else
  148.             cout << "Вы ввели неправильную цифру. Попробуй ещё раз" << endl;
  149.     }
  150. }
  151. //реализация функция создания и заполнения файла
  152. void create_file()
  153. {
  154.     string name;//переменная под название файла
  155.     string line;//переменная под введеные строки пользователя
  156.  
  157.     char logic;//переменная на продолжение ввода или нет
  158.  
  159.     cout << "Вы выбрали создание файла" << endl<< "Введите название файла(без .txt)" << endl;
  160.     cin >> name;// запись названия
  161.  
  162.     cin.ignore(256, '\n');//так как следующая функция у нас getline нам необходимо перенести поток cin на новую строку, иначе она будет считывать сразу после введенно name
  163.     ofstream fi(name+".txt");//открываем файл с добавлением .txt, чтобы открыть любой файл
  164.  
  165.  
  166.     cout << "Так мы ввели название, теперь введите содержимое"  << endl;
  167.     while (1)//вводим пока пользователь того хочет
  168.     {
  169.         getline(cin, line);//считываем строку пользователя
  170.         fi << line <<endl;//вводим строку в файл, а также перевод строки
  171.  
  172.         cout << "Продолжить?(Д/Н)"<<endl;//спрашивает дальнейшие действия пользователя
  173.         cin >> logic;//записываем намеривание
  174.         cin.ignore(256, '\n');
  175.         if ((logic != 'Д') && (logic != 'д'))//проверяем(если ввод неправильный заканчиваем)
  176.             break;
  177.     }
  178.     cout << "Файл создан"<< endl<<endl;//сообзаем об успешности операции
  179.     fi.close();//закрытие файла
  180.    
  181. }
  182. int main()
  183. {
  184.     SetConsoleCP(1251);//русифакатор ввода слов
  185.     SetConsoleOutputCP(1251);//русификатор вывода слов
  186.  
  187.     int switcher = 0;//переменная отвечающая за команду введенную пользователем
  188.    
  189.     cout << "Привет это программа перестановки слов в произвольном файле" << endl;//привествие пользователя
  190.     while (1)//запуск цикл, чтобы пользователь мог повторить действия
  191.     {  
  192.         cout << "Давай выберем задачу:" << endl
  193.             << "1) перемешивание слов в файле" << endl
  194.             << "2) создание файла" << endl
  195.             << "3) конец работы" << endl;
  196.         cin >> switcher;//читаем команду пользователя
  197.         if (switcher == 1)//перемешивание
  198.             mix();
  199.         else if (switcher == 2)//создание нового файла
  200.             create_file();
  201.         else if (switcher == 3)//окончание программы
  202.         {
  203.             cout << "^^ Пока. Было приятно с тобой работать ^^" << endl;
  204.             exit(0);//функция, которая заканчивает экстренно программу
  205.         }
  206.         else//обработка ошибок
  207.             cout << "Вы ввели неправильную цифру. Попробуй ещё раз" << endl;
  208.     }
  209.     return 0;
  210. }
  211.  
  212.  
Advertisement
RAW Paste Data Copied
Advertisement