Переписать строки файла в обратном порядке в другой файл по отношению к порядку строк - 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, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д