Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>//стандартная библиотека вывода и ввода информации
- #include <vector>//добавление vector
- #include <fstream>//работа с файлами
- #include <string>//работа со строками
- #include <Windows.h>//локализатор
- using namespace std;//указываем где находятся большиснвто используем функции cin,cout,ofstream,endl а также класс string, vector и другие
- //объявляем будущие функции
- void mix_rand();//функция перемешивания всех элементов
- void mix_spot();//функция точечного(двух элементов) перемешивания
- void mix();//функция которая определяет какое будет использованно перемешивания
- void create_file();// функция создания и заполнения файла
- //реализация функция перемешивания всех элементов
- void mix_rand()
- {
- vector<string> array;//массив под слова
- string buff;//буфер для чтения слов
- string name_file;//название файла
- cout << "Вы выбрали перемешать все элементы" << endl;
- cout << "Введите имя файла" << endl;
- cin >> name_file;//запись имени файла
- ifstream fi(name_file);//открытие файла для чтения
- if (!fi.is_open())//проверка открытия
- {
- cout << "Ошибка открытия файлов" << endl;
- }
- else
- {
- while (fi >> buff)//пока есть слова в файле записываем их buff и кладем в массив
- {
- array.push_back(buff);
- }
- fi.close();//закрытие файла
- cout << "Мешаем..." << endl << ".." << endl << "." << endl;//интерактив(советую удалить)
- for (int i = 0; i < 100; i++)//перемешавние элементов
- {
- //мы рандомно выбираем элементы которые будет менять местами
- int j = rand() % array.size();//генерируем рандомное число от 0 до последнего элемента
- int k = rand() % array.size();//генерируем рандомное число от 0 до последнего элемента
- swap(array[j], array[k]);//получившиеся слова меняем местами
- }
- ofstream fo(name_file);//открытие файла для записи
- for (int i = 0; i < array.size(); i++)//записываем все элементы
- {
- fo << array[i] + " ";//слова плюс пробел для хорошего чтения
- if (i == 9)
- fo << endl;//раз в 10 слов переводим строку, чтобы легче читалось
- }
- fo.close();//закрытие файла
- }
- cout << "Перемешивание выполнено" << endl << endl;//информирование об успешности
- }
- //реализация функция точечного(двух элементов) перемешивания
- void mix_spot()
- {
- string str;//переменную под файл. в ней будут храниться все слова файла. это сделано ради удобства работы с функциями find() и replace()
- string buff;//буфер для чтения слов
- string name_file;//название файла
- cout << "Вы выбрали поменять два слова местами" << endl;
- while (1)
- {
- cout << "Введите имя файла" << endl;
- cin >> name_file;//запись имени файла
- ifstream fi(name_file);//открытие файла для чтения
- if (!fi.is_open())//проверка открытия
- {
- cout << "Ошибка открытия файлов" << endl;
- }
- else
- {
- while (getline(fi, buff))//записываем по линиям
- {
- str += buff +"\n";//записываем все в нашу строку для дальнейших действий, добавляем '\n' чтобы не потерять красные строки
- }
- fi.close();//закрытие файла
- string name1;//переменное под 1 слово которое будем менять
- int pos1 = 0;//переменная для поиска позиции слова
- string name2;//переменное под 2 слово которое будем менять
- int pos2 = 0;//переменная для поиска позиции слова
- cout << "Введите первое слово" << endl;
- cin >> name1;//запись слова 1
- cout << "Введите второе слово" << endl;
- cin >> name2;//запись слова 2
- //ищем слова в нашей строке
- pos1 = str.find(name1, pos1);
- pos2 = str.find(name2, pos2);
- if (pos1 == -1 || pos2 == -1)//если не нашли слова заканчиваем
- {
- cout << "Ваши слова не найдены" << endl;
- return;//выход из функции
- }
- else
- {
- cout << "Мешаем..." << endl << ".." << endl << "." << endl;//интерактив(реально лучше удали)
- str.replace(pos1, name1.length(), name2);//заменяем второе слово на первое
- str.replace(pos2, name2.length(), name1);//заменяем первое слово на второе
- }
- ofstream fo(name_file);//открытие файла для записи
- fo << str;//вкладываем получившую строку
- fo.close();//закрытие файла
- break;//выход из цикла
- }
- }
- cout << "Перемешивание выполнено" << endl << endl;
- }
- //реализация функция которая определяет какое будет использованно перемешивания
- void mix()
- {
- cout << "Вы выбрали перемешивание слов в файле" << endl;
- int switcher=0;//переменная отвечающая за команду введенную пользователем
- cout << "Выберите метод сортировки" << endl
- << "1)перемешать все элементы" << endl
- << "2)поменять два слова местами" << endl;
- while (1)
- {
- cin >> switcher;//читаем команду
- if (switcher == 1)//перемешивание всех элементов
- {
- mix_rand();
- break;
- }
- else if (switcher == 2)//перемешивание конкретных элементов
- {
- mix_spot();
- break;
- }
- else
- cout << "Вы ввели неправильную цифру. Попробуй ещё раз" << endl;
- }
- }
- //реализация функция создания и заполнения файла
- void create_file()
- {
- string name;//переменная под название файла
- string line;//переменная под введеные строки пользователя
- char logic;//переменная на продолжение ввода или нет
- cout << "Вы выбрали создание файла" << endl<< "Введите название файла(без .txt)" << endl;
- cin >> name;// запись названия
- cin.ignore(256, '\n');//так как следующая функция у нас getline нам необходимо перенести поток cin на новую строку, иначе она будет считывать сразу после введенно name
- ofstream fi(name+".txt");//открываем файл с добавлением .txt, чтобы открыть любой файл
- cout << "Так мы ввели название, теперь введите содержимое" << endl;
- while (1)//вводим пока пользователь того хочет
- {
- getline(cin, line);//считываем строку пользователя
- fi << line <<endl;//вводим строку в файл, а также перевод строки
- cout << "Продолжить?(Д/Н)"<<endl;//спрашивает дальнейшие действия пользователя
- cin >> logic;//записываем намеривание
- cin.ignore(256, '\n');
- if ((logic != 'Д') && (logic != 'д'))//проверяем(если ввод неправильный заканчиваем)
- break;
- }
- cout << "Файл создан"<< endl<<endl;//сообзаем об успешности операции
- fi.close();//закрытие файла
- }
- int main()
- {
- SetConsoleCP(1251);//русифакатор ввода слов
- SetConsoleOutputCP(1251);//русификатор вывода слов
- int switcher = 0;//переменная отвечающая за команду введенную пользователем
- cout << "Привет это программа перестановки слов в произвольном файле" << endl;//привествие пользователя
- while (1)//запуск цикл, чтобы пользователь мог повторить действия
- {
- cout << "Давай выберем задачу:" << endl
- << "1) перемешивание слов в файле" << endl
- << "2) создание файла" << endl
- << "3) конец работы" << endl;
- cin >> switcher;//читаем команду пользователя
- if (switcher == 1)//перемешивание
- mix();
- else if (switcher == 2)//создание нового файла
- create_file();
- else if (switcher == 3)//окончание программы
- {
- cout << "^^ Пока. Было приятно с тобой работать ^^" << endl;
- exit(0);//функция, которая заканчивает экстренно программу
- }
- else//обработка ошибок
- cout << "Вы ввели неправильную цифру. Попробуй ещё раз" << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement