Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <stdio.h>
- #include <vector>
- #include <string>
- int main()
- {
- setlocale(LC_ALL, "RUS");
- FILE *file = NULL;
- // Вводимые данные:
- int n = 5; // <- Количество символов на строку
- char filePath[256]; // <- Путь к файлу
- printf("Введите количество символов на строку: ");
- scanf_s("%i", &n);
- printf("\nВведите имя файла (например, data.txt): ");
- scanf_s("%s", filePath, _countof(filePath));
- fopen_s(&file, filePath, "r"); // <- Открываем файл для чтения
- std::vector<std::string> lines; // <- Массив строк из файла
- // Ошибка, если не удалось открыть файл:
- if (file == NULL) {
- printf("Не удалось открыть файл\n");
- return -1;
- }
- constexpr unsigned buffSize = 100; // <- Размер буфера
- char buff[buffSize]; // <- Буфер строки
- while (fgets(buff, buffSize, file)) // <- Считываем файл по-строчно, пока не достигнем конца
- {
- lines.emplace_back(buff); // <- Заполняем локальный массив строк
- }
- fclose(file); // <- Закрываем файл
- fopen_s(&file, filePath, "w"); // <- Открываем файл для записи
- for (auto it = lines.begin(); it != lines.end(); it++) { // <- Для каждой строки в массиве
- while (it->size() > n) { // <- Пока размер строки больше, чем n
- std::string sub = it->substr(n, it->size()); // <- Вырезаем подстроку, оставляя в текущей n символов
- if (sub.size() == 1 && sub.find("\n") != std::string::npos) {
- it++; continue; // <- Если случайно срезаем конец строки (т.е. '\n'), то пропускаем и идем дальше
- }
- it->erase(n, it->size()); // <- Стираем оставшиеся символы
- it->append("\n"); // <- Объявляем конец строки
- it = lines.insert(it + 1, sub); // <- Оставшиеся символы помещаем в новую строку
- }
- }
- // Вывод строк в файл
- for (auto &line : lines) {
- fprintf_s(file, "%s", line.c_str());
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement