Nexeon

Untitled

Mar 25th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <stdio.h>
  4. #include <vector>
  5. #include <string>
  6.  
  7. int main()
  8. {
  9.     setlocale(LC_ALL, "RUS");
  10.  
  11.     FILE *file = NULL;
  12.  
  13.     // Вводимые данные:
  14.  
  15.     int n = 5; // <- Количество символов на строку
  16.     char filePath[256]; // <- Путь к файлу
  17.  
  18.     printf("Введите количество символов на строку: ");
  19.     scanf_s("%i", &n);
  20.  
  21.     printf("\nВведите имя файла (например, data.txt): ");
  22.     scanf_s("%s", filePath, _countof(filePath));
  23.  
  24.     fopen_s(&file, filePath, "r"); // <- Открываем файл для чтения
  25.  
  26.     std::vector<std::string> lines; // <- Массив строк из файла
  27.  
  28.     // Ошибка, если не удалось открыть файл:
  29.  
  30.     if (file == NULL) {
  31.         printf("Не удалось открыть файл\n");
  32.         return -1;
  33.     }
  34.  
  35.     constexpr unsigned buffSize = 100; //  <- Размер буфера
  36.     char buff[buffSize]; // <- Буфер строки
  37.  
  38.     while (fgets(buff, buffSize, file)) // <- Считываем файл по-строчно, пока не достигнем конца
  39.     {
  40.         lines.emplace_back(buff); // <- Заполняем локальный массив строк
  41.     }
  42.  
  43.     fclose(file); // <- Закрываем файл
  44.  
  45.     fopen_s(&file, filePath, "w"); // <- Открываем файл для записи
  46.  
  47.     for (auto it = lines.begin(); it != lines.end(); it++) { // <- Для каждой строки в массиве
  48.  
  49.         while (it->size() > n) { // <- Пока размер строки больше, чем n
  50.             std::string sub = it->substr(n, it->size()); // <- Вырезаем подстроку, оставляя в текущей n символов
  51.            
  52.             if (sub.size() == 1 && sub.find("\n") != std::string::npos) {
  53.                 it++; continue; // <- Если случайно срезаем конец строки (т.е. '\n'), то пропускаем и идем дальше
  54.             }
  55.  
  56.             it->erase(n, it->size()); // <- Стираем оставшиеся символы
  57.  
  58.             it->append("\n"); // <- Объявляем конец строки
  59.  
  60.             it = lines.insert(it + 1, sub); // <- Оставшиеся символы помещаем в новую строку
  61.         }
  62.     }
  63.  
  64.     // Вывод строк в файл
  65.  
  66.     for (auto &line : lines) {
  67.         fprintf_s(file, "%s", line.c_str());
  68.     }
  69.  
  70.     system("pause");
  71.  
  72.     return 0;
  73. }
Add Comment
Please, Sign In to add comment