Массив: Сортировка слов по алфавиту - C (СИ)
Формулировка задачи:
Всем добрый день!
Помогите разобраться с задачей :
Пользователь вводит слова, которые помещаются в массив символов одно за другим в порядке ввода, в конце каждого слова помещается нулевой символ ( '\0') .
Указатели на слова помещаются в массив указателей.
Составить программу, которая, используя массив указателей, проводит сортировку слов по алфавиту (при этом массив символов остается неизменным). Вывести
отсортированный список слов на экран.
Как отсортировать строки я знаю,проблема как организовать указатели на слова,пыталась по всякому,ничего не выходит.
Смогла реализовать только один случай ,НО там количество слов известно и слова вводятся как строки через enter,а как их вводить через пробел и запоминать в указатели,не знаю
Заранее спасибо за помощь.
#define N 6
int main(void) {
char strings[N][30];
char *strP[N];
int i;
for(i=0; i<N; i++) //чтение строк
{
gets(strings[i]);
strP[i] = &strings[i][0]; //i-строки 0-столбец,указатель на первую букву слова
}Решение задачи: «Массив: Сортировка слов по алфавиту»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void * a, const void * b) {
return strcmp(*(char**)a, *(char**)b);
}
#define WORDS_COUNT (6)
#define WORD_LENGTH (30)
int main(void) {
char words[WORDS_COUNT][WORD_LENGTH] = {
"Petrov", "Sidorov", "Alibaba", "Ivanov", "Zulukbek", "Yiholainen"
};
char * pointers[WORDS_COUNT];
int i;
for ( i = 0; i < WORDS_COUNT; ++i )
pointers[i] = words[i];
qsort(pointers, WORDS_COUNT, sizeof(char*), cmp);
printf("Words array:\n");
for ( i = 0; i < WORDS_COUNT; ++i )
printf("%s ", words[i]);
printf("\nPointers array:\n");
for ( i = 0; i < WORDS_COUNT; ++i )
printf("%s ", pointers[i]);
printf("\n");
return 0;
}
Объяснение кода листинга программы
- Подключаются необходимые библиотеки для работы со строками и сортировкой массивов
- Определяется функция сравнения, которая будет использоваться для сортировки массива
- Задаются константы, определяющие количество слов в массиве (WORDS_COUNT) и максимальную длину слова (WORD_LENGTH)
- Создается массив слов и заполняется некоторыми значениями
- Создается массив указателей на слова, который будет использоваться для сортировки
- В цикле все элементы массива words копируются в массив pointers
- Используя функцию qsort, массив pointers сортируется в порядке возрастания с помощью функции сравнения cmp
- Выводится отсортированный массив words и массив pointers
- Программа завершается