Переписать строки файла в обратном порядке в другой файл по отношению к порядку строк - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Имеется текстовый файл. переписать его строки в обратном порядке в другой файл порядок строк во втором файле должен быть обратным по отношению к порядку строк в заданном файле. Как сделать?

Желательно в си

Надо чтобы было:

исход:

12345 23456 34567 45678 56789

Получилось:

98765 87654 76543 65432 54321 Могу только поменять символы:
Листинг программы
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <Windows.h>
  4. #include <wincon.h>
  5. #include <conio.h>
  6. #include <cstdio>
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9. FILE *F1, *F2;
  10. char ch, sl[1000], sl2[1000], c;
  11. if ((fopen_s(&F1, "1.txt", "r")) != 0)
  12. {
  13. printf("Невозможно открыть файл.\n");
  14. return 0;
  15. }
  16. if ((fopen_s(&F2, "2.txt", "w+")) != 0){
  17. printf("Невозможно открыть файл.\n");
  18. return 0;
  19. }
  20. while (!feof(F1))
  21. {
  22. int N, i;
  23. fgets(sl, 1000, F1);
  24. N = strlen(sl);
  25. i = N;
  26. for (i = N - 1; i > 0; i--)
  27. if (sl[i] != '\n')
  28. fprintf(F2, "%c", sl[i]);
  29. fprintf(F2, "%c", sl[0]);
  30. fprintf(F2, "%c", '\n');
  31. }
  32. fclose(F1);
  33. fclose(F2);
  34. return 0;
  35. }

Решение задачи: «Переписать строки файла в обратном порядке в другой файл по отношению к порядку строк»

textual
Листинг программы
  1. /* ANSI C 99 */
  2.  
  3. #include <glib.h>
  4.  
  5. #define INPUT_FILE_NAME "in.txt"
  6. #define OUTPUT_FILE_NAME "out.txt"
  7.  
  8. char * my_strreverse(char * str) {
  9.     char * head, * tail, tmp;
  10.    
  11.     for ( head = tail = str; *tail && *tail != '\n'; ++tail )
  12.         ;
  13.    
  14.     for ( --tail; head < tail; ++head, --tail ) {
  15.         tmp = *head;
  16.         *head = *tail;
  17.         *tail = tmp;
  18.     }
  19.    
  20.     return str;
  21. }
  22.  
  23. int main(void) {
  24.     GError * err = NULL;
  25.     GIOChannel * input = g_io_channel_new_file(INPUT_FILE_NAME, "r", &err);
  26.     if ( ! input ) {
  27.         g_print("%s\n", ( err ) ? err->message : "Can't open input file!");
  28.         return 1;
  29.     }
  30.    
  31.     GSList * stack = NULL;
  32.     GString * str = g_string_new("");
  33.     GIOStatus status;
  34.    
  35.     while ( ( status = g_io_channel_read_line_string(input, str, NULL, &err) ) == G_IO_STATUS_NORMAL )
  36.         stack = g_slist_prepend(stack, g_strdup(str->str));
  37.    
  38.     if ( status != G_IO_STATUS_EOF ) {
  39.         g_print("%s\n", ( err ) ? err->message : "Unexpected end of input file!");
  40.         return 1;
  41.     }
  42.    
  43.     g_io_channel_close(input);
  44.    
  45.     GIOChannel * out = g_io_channel_new_file(OUTPUT_FILE_NAME, "w", &err);
  46.     if ( ! out ) {
  47.         g_print("%s\n", ( err ) ? err->message : "Can't open output file!");
  48.         return 1;
  49.     }
  50.    
  51.     gsize writen;
  52.     for ( GSList * iter = stack; iter; iter = iter->next ) {
  53.         if ( g_io_channel_write_chars(out, my_strreverse(iter->data), -1, &writen, &err) != G_IO_STATUS_NORMAL ) {
  54.             g_print("%s\n", ( err ) ? err->message : "Unexpected end of output file!");
  55.             return 1;
  56.         }
  57.         g_free(iter->data);
  58.     }
  59.    
  60.     g_io_channel_close(out);
  61.     g_slist_free(stack);
  62.     g_string_free(str, TRUE);
  63.    
  64.     return 0;
  65. }

Объяснение кода листинга программы

  1. Включаем заголовочный файл glib.h для использования функций и типов Glib.
  2. Определяем строки с именами файлов для чтения и записи.
  3. Функция my_strreverse() используется для переворачивания строки.
  4. В функции main() открываем файл для чтения и создаем пустой канал вывода.
  5. Создаем пустой стек для хранения строк из файла.
  6. Читаем файл построчно и добавляем каждую строку в конец стека.
  7. Закрываем вводный канал.
  8. Открываем файл для записи.
  9. Переворачиваем каждую строку из стека и записываем ее в файл.
  10. Закрываем файл вывода.
  11. Освобождаем память, выделенную под строки в стеке.
  12. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы