Переписать строки файла в обратном порядке в другой файл по отношению к порядку строк - C (СИ)
Формулировка задачи:
Имеется текстовый файл. переписать его строки в обратном порядке в другой файл порядок строк во втором файле должен быть обратным по отношению к порядку строк в заданном файле. Как сделать?
Желательно в си
Надо чтобы было:исход:
12345 23456 34567 45678 56789Получилось:
98765 87654 76543 65432 54321 Могу только поменять символы:#include "stdafx.h" #include <iostream> #include <Windows.h> #include <wincon.h> #include <conio.h> #include <cstdio> int _tmain(int argc, _TCHAR* argv[]) { FILE *F1, *F2; char ch, sl[1000], sl2[1000], c; if ((fopen_s(&F1, "1.txt", "r")) != 0) { printf("Невозможно открыть файл.\n"); return 0; } if ((fopen_s(&F2, "2.txt", "w+")) != 0){ printf("Невозможно открыть файл.\n"); return 0; } while (!feof(F1)) { int N, i; fgets(sl, 1000, F1); N = strlen(sl); i = N; for (i = N - 1; i > 0; i--) if (sl[i] != '\n') fprintf(F2, "%c", sl[i]); fprintf(F2, "%c", sl[0]); fprintf(F2, "%c", '\n'); } fclose(F1); fclose(F2); return 0; }
Решение задачи: «Переписать строки файла в обратном порядке в другой файл по отношению к порядку строк»
textual
Листинг программы
/* ANSI C 99 */ #include <glib.h> #define INPUT_FILE_NAME "in.txt" #define OUTPUT_FILE_NAME "out.txt" char * my_strreverse(char * str) { char * head, * tail, tmp; for ( head = tail = str; *tail && *tail != '\n'; ++tail ) ; for ( --tail; head < tail; ++head, --tail ) { tmp = *head; *head = *tail; *tail = tmp; } return str; } int main(void) { GError * err = NULL; GIOChannel * input = g_io_channel_new_file(INPUT_FILE_NAME, "r", &err); if ( ! input ) { g_print("%s\n", ( err ) ? err->message : "Can't open input file!"); return 1; } GSList * stack = NULL; GString * str = g_string_new(""); GIOStatus status; while ( ( status = g_io_channel_read_line_string(input, str, NULL, &err) ) == G_IO_STATUS_NORMAL ) stack = g_slist_prepend(stack, g_strdup(str->str)); if ( status != G_IO_STATUS_EOF ) { g_print("%s\n", ( err ) ? err->message : "Unexpected end of input file!"); return 1; } g_io_channel_close(input); GIOChannel * out = g_io_channel_new_file(OUTPUT_FILE_NAME, "w", &err); if ( ! out ) { g_print("%s\n", ( err ) ? err->message : "Can't open output file!"); return 1; } gsize writen; for ( GSList * iter = stack; iter; iter = iter->next ) { if ( g_io_channel_write_chars(out, my_strreverse(iter->data), -1, &writen, &err) != G_IO_STATUS_NORMAL ) { g_print("%s\n", ( err ) ? err->message : "Unexpected end of output file!"); return 1; } g_free(iter->data); } g_io_channel_close(out); g_slist_free(stack); g_string_free(str, TRUE); return 0; }
Объяснение кода листинга программы
- Включаем заголовочный файл glib.h для использования функций и типов Glib.
- Определяем строки с именами файлов для чтения и записи.
- Функция my_strreverse() используется для переворачивания строки.
- В функции main() открываем файл для чтения и создаем пустой канал вывода.
- Создаем пустой стек для хранения строк из файла.
- Читаем файл построчно и добавляем каждую строку в конец стека.
- Закрываем вводный канал.
- Открываем файл для записи.
- Переворачиваем каждую строку из стека и записываем ее в файл.
- Закрываем файл вывода.
- Освобождаем память, выделенную под строки в стеке.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д