Ввести набор слов и отсортировать их в алфавитном порядке - C (СИ)

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

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

Надо ввести набор слов и отсортировать их в алфавитном порядке. Помогите, пожалуйста!!!

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int asccmp(const void * a, const void * b){
  6.     return strcmp(*(char**)a, *(char**)b);
  7. }
  8.  
  9. int main(void){
  10.     char buf[BUFSIZ], * p, ** words;
  11.     int cnt, i;
  12.  
  13.     words = NULL;
  14.     cnt = 0;
  15.  
  16.     while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 ){
  17.         for ( p = strtok(buf, " "); p; p = strtok(NULL, " ") ){
  18.             if ( ( words = (char**)realloc(words, sizeof(char*) * (cnt + 1)) ) == NULL ){
  19.                 perror("realloc");
  20.                 exit(1);
  21.             }
  22.             if ( ( words[cnt++] = strdup(p) ) == NULL ){
  23.                 perror("strdup");
  24.                 exit(1);
  25.             }
  26.         }
  27.  
  28.         if ( ! words ){
  29.             fprintf(stderr, "Empty string!\n");
  30.             continue;
  31.         }
  32.  
  33.         qsort(words, cnt, sizeof(char*), asccmp);
  34.  
  35.         printf("Result: ");
  36.         for ( i = 0; i < cnt; ++i )
  37.             printf("%s ", words[i]);
  38.         printf("\n");
  39.  
  40.         for ( i = 0; i < cnt; ++i )
  41.             free(words[i]);
  42.         free(words);
  43.         words = NULL;
  44.         cnt = 0;
  45.     }
  46.  
  47.     exit(0);
  48. }

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

  1. Ввод набора слов осуществляется с помощью функции scanf, которая считывает строку (до первого символа новой строки) и разделяет её на слова (по пробелам). Каждое слово сохраняется в массиве words.
  2. Каждое слово в массиве words выделяется динамически с помощью функции strdup, которая выделяет память под копию строки.
  3. Если слова не введены, выводится сообщение об ошибке и программа продолжает выполнение.
  4. Если после ввода всех слов в массиве words не осталось памяти, выводится сообщение об ошибке и программа завершается.
  5. Для сортировки массива words используется функция qsort, которая сортирует элементы массива по алфавиту с помощью функции сравнения asccmp.
  6. Результат сортировки выводится на экран с помощью цикла for.
  7. После вывода результата все слова в массиве words освобождаются с помощью функции free, а сам массив words освобождается.
  8. После окончания работы программы переменные words, cnt и i сбрасываются в начальное состояние, а программа завершается.

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


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

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

7   голосов , оценка 4 из 5

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

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

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