Ввести набор слов и отсортировать их в алфавитном порядке - 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сбрасываются в начальное состояние, а программа завершается.