Отсортировать строки по алфавиту - C (СИ)
Формулировка задачи:
Здравствуйте!
Есть 2 файла.
Тоесть, первый программа берет 1 букву каждой строки и сортирует их по алфавиту.
Помогите написать.
Заранее благодарен.
input.txt:
Форум программистов и сисадминов
Привет всем
Как дела
Сегодня жарко
output.txt:
Как дела
Привет всем
Сегодня жарко
Форум программистов и сисадминов
Решение задачи: «Отсортировать строки по алфавиту»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <wchar.h> #include <locale.h> #define _GNU_SOURCE #define INPUT_FILE_NAME "input.txt" #define OUTPUT_FILE_NAME "output.txt" int asc_cmp(const void * a, const void * b) { return wcscmp(*(wchar_t**)a, *(wchar_t**)b); } int main(void) { wchar_t buf[BUFSIZ], ** strings; size_t count, i; FILE * f; setlocale(LC_ALL, "ru_RU.utf8"); if ( ! ( f = fopen(INPUT_FILE_NAME, "r") ) ){ fprintf(stderr, "Can't open file %s for input!\n", INPUT_FILE_NAME); exit(1); } for ( strings = NULL, count = 0; fgetws(buf, BUFSIZ, f); ++count ) { if ( ! ( strings = realloc(strings, sizeof(wchar_t*) * (count + 1)) ) || ! ( strings[count] = wcsdup(buf) ) ) { fprintf(stderr, "Memory error!\n"); if ( fclose(f) ) fprintf(stderr, "Can't properly close input file!\n"); exit(1); } } if ( ferror(f) || fclose(f) ) { fprintf(stderr, "Something is wrong with input file!\n"); exit(1); } if ( ! count ) { fprintf(stderr, "Input file is empty!\n"); exit(1); } qsort(strings, count, sizeof(wchar_t*), asc_cmp); if ( ! ( f = fopen(OUTPUT_FILE_NAME, "w") ) ) { fprintf(stderr, "Can't open file %s for output!\n", OUTPUT_FILE_NAME); exit(1); } for ( i = 0; i < count; ++i ) { if ( fputws(strings[i], f) < 0 ) { fprintf(stderr, "Can't write to output file!\n"); if ( fclose(f) ) fprintf(stderr, "can't properly close output file!\n"); exit(1); } } for ( i = 0; i < count; ++i ) free(strings[i]); free(strings); if ( fclose(f) ) { fprintf(stderr, "Can't properly close output file!\n"); exit(1); } fprintf(stderr, "Done.\n"); exit(0); }
Объяснение кода листинга программы
Код открывает файл с входными данными, считывает строки из этого файла и сохраняет их в массиве строк. Затем он сортирует этот массив строк в алфавитном порядке с помощью функции qsort и функции сравнения asc_cmp. После этого код открывает файл для записи, записывает отсортированные строки в этот файл и закрывает его. Если при работе с файлами или памятью возникает ошибка, код выводит сообщение об ошибке и завершает работу с кодом 1. В конце код выводит сообщение Done
и завершает работу с кодом 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д