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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int asccmp(const void * a, const void * b){
    return strcmp(*(char**)a, *(char**)b);
}
 
int main(void){
    char buf[BUFSIZ], * p, ** words;
    int cnt, i;
 
    words = NULL;
    cnt = 0;
 
    while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 ){
        for ( p = strtok(buf, " "); p; p = strtok(NULL, " ") ){
            if ( ( words = (char**)realloc(words, sizeof(char*) * (cnt + 1)) ) == NULL ){
                perror("realloc");
                exit(1);
            }
            if ( ( words[cnt++] = strdup(p) ) == NULL ){
                perror("strdup");
                exit(1);
            }
        }
 
        if ( ! words ){
            fprintf(stderr, "Empty string!\n");
            continue;
        }
 
        qsort(words, cnt, sizeof(char*), asccmp);
 
        printf("Result: ");
        for ( i = 0; i < cnt; ++i )
            printf("%s ", words[i]);
        printf("\n");
 
        for ( i = 0; i < cnt; ++i )
            free(words[i]);
        free(words);
        words = NULL;
        cnt = 0;
    }
 
    exit(0);
}

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

  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
Похожие ответы