C — Сортировка массива структур по полю массива символов

В настоящее время я изучаю сортировку массива структур по определенному полю в структурах с помощью функции qsort, но я мог бы использовать отправную точку.

Вот мой текущий массив структур:

/* database struct */
typedef struct node {
    char       name[MAX];
    char       lname[MAX];
    char       address[MAX];
    char       number[MAX];
}record_type;

/* global variables */
record_type record[100];

Я хотел бы иметь возможность сортировать это по полю «имя» в алфавитном порядке (A-Z). Все записи в каждом массиве символов в нижнем регистре. Мне трудно найти информацию о том, как это сделать в Интернете или в книге C, которая у меня есть. Может ли кто-нибудь указать мне в правильном направлении?


person James Manes    schedule 06.12.2012    source источник
comment
См. соответствующие ссылки. Вот аналогичный один. В основном вы должны использовать метод qsort   -  person Shiplu Mokaddim    schedule 07.12.2012


Ответы (1)


Согласно подписи qsort.

void qsort ( void * base, size_t num, size_t size,
             int ( * compar ) ( const void *, const void * ) );

Определите функцию сравнения.

int compare_record_type(const void* a, const void* b) {
    return strncmp(((*record_type)a)->name, ((*record_type)b)->name, MAX)
}

И вызовите qsort следующим образом.

qsort(record, 100, sizeof(record_type), compare_record_type)

Дополнительную информацию можно найти на cplusplus.com.

person udoprog    schedule 06.12.2012