Advertisement
Nexeon

Untitled

Mar 25th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement