Ввести набор слов и отсортировать их в алфавитном порядке - 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);
- }
Объяснение кода листинга программы
- Ввод набора слов осуществляется с помощью функции
scanf
, которая считывает строку (до первого символа новой строки) и разделяет её на слова (по пробелам). Каждое слово сохраняется в массивеwords
. - Каждое слово в массиве
words
выделяется динамически с помощью функцииstrdup
, которая выделяет память под копию строки. - Если слова не введены, выводится сообщение об ошибке и программа продолжает выполнение.
- Если после ввода всех слов в массиве
words
не осталось памяти, выводится сообщение об ошибке и программа завершается. - Для сортировки массива
words
используется функцияqsort
, которая сортирует элементы массива по алфавиту с помощью функции сравненияasccmp
. - Результат сортировки выводится на экран с помощью цикла
for
. - После вывода результата все слова в массиве
words
освобождаются с помощью функцииfree
, а сам массивwords
освобождается. - После окончания работы программы переменные
words
,cnt
иi
сбрасываются в начальное состояние, а программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д