Отсортировать слова в заданном тексте по алфавиту или наоборот - C (СИ)

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

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

Дан текст. Сортировать слова в тексте по алфавиту или наоборот (по желанию пользователя)

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <glib.h>
 
#define guess_the_users_desire() ( g_random_int() & 1 )
 
int asc_cmp(gconstpointer a, gconstpointer b) {
    return strcmp((const char*)a, (const char*)b);
}
 
int desc_cmp(gconstpointer a, gconstpointer b) {
    return strcmp((const char*)b, (const char*)a);
}
 
GCompareFunc COMPARE_FUNCTIONS[] = { asc_cmp, desc_cmp };
 
void dump(gconstpointer str) {
    printf("%s ", (const char*)str);
}
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("Words:  ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        GList * words = NULL;
        
        for ( char * wrd = strtok(buf, DELIM); wrd; wrd = strtok(NULL, DELIM) )
            words = g_list_prepend(words, wrd);
        
        words = g_list_sort(words, COMPARE_FUNCTIONS[guess_the_users_desire()]);
        
        printf("Sorted: ");
        g_list_foreach(words, (GFunc)dump, NULL);
        printf("\n");
        
        g_list_free(words);
    }
    
    return 0;
}

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

В этом коде используется библиотека GLib для работы со списками и сортировки.

  1. #include , #include , #include - подключаются необходимые заголовочные файлы для работы с C.
  2. #define guess_the_users_desire() ( g_random_int() & 1 ) - определяется функция, которая возвращает 0 или 1, т.е. выбирает случайный порядок сортировки (0 - по возрастанию, 1 - по убыванию).
  3. int asc_cmp(gconstpointer a, gconstpointer b) { return strcmp((const char)a, (const char)b); }, int desc_cmp(gconstpointer a, gconstpointer b) { return strcmp((const char)b, (const char)a); } - определяются две функции сравнения, которые используются для сортировки списка в нужном порядке.
  4. GCompareFunc COMPARE_FUNCTIONS[] = { asc_cmp, desc_cmp }; - создается массив функций сравнения, который будет использоваться при сортировке.
  5. *void dump(gconstpointer str) { printf(%s, (const char)str); }** - определяется функция, которая выводит элементы списка на экран.
  6. #define DELIM \t\n - определяется строка-разделитель, которая будет использоваться при разбиении входной строки на слова.
  7. int main(void) { - определяется функция main(), которая является точкой входа в программу.
  8. char buf[BUFSIZ]; - создается буфер для чтения строки из стандартного ввода.
  9. *while ( printf(Words:  ) && fgets(buf, BUFSIZ, stdin) && buf != '\n' ) {** - выполняется цикл, пока пользователь не введет пустую строку.
  10. *GList words = NULL;** - создается указатель на список слов.
  11. *for ( char wrd = strtok(buf, DELIM); wrd; wrd = strtok(NULL, DELIM) )** - выполняется цикл по всем словам во входной строке.
  12. words = g_list_prepend(words, wrd); - каждое слово добавляется в список.
  13. words = g_list_sort(words, COMPARE_FUNCTIONS[guess_the_users_desire()]); - список сортируется с использованием выбранной функции сравнения.
  14. printf(Sorted:); - выводится сообщение о сортировке.
  15. g_list_foreach(words, (GFunc)dump, NULL); - каждое слово из списка выводится на экран.
  16. printf(\n); - выводится символ новой строки.
  17. g_list_free(words); - освобождается память, занятая списком.
  18. return 0; - функция main() возвращает 0, что означает успешное выполнение программы. Пользователю предлагается ввести строку со словами для сортировки. Введенные слова разделяются по пробелам, табуляции и переносам строк и добавляются в список. Затем список сортируется в зависимости от выбранного пользователем порядка (по возрастанию или по убыванию) и выводится на экран в отсортированном виде.

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


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

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

11   голосов , оценка 3.727 из 5
Похожие ответы