Сортировка структуры по алфавиту - C (СИ)
Формулировка задачи:
Есть динамический массив структур, в нем лежат имя, фамилия, отчество и номер телефона. Нужно сделать сортировку по имени ( по алфавиту), используя qsort. Я не понимаю что мне писать в функцию compare.
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#pragma pack(push,1)
struct people
{
char surname[70];
char name[70];
char otchestvo[70];
int nomer;
};
#pragma pop
compare ()
{
}
int main(void)
{
int d =0,c=1, k=0,x=0,n_u =1,n_a=0;
FILE *in = fopen("i:/data.txt","r");
if (in==NULL )
{
printf ("No file");
return 1;
}
people* mas = (people*)malloc(sizeof(people)*1);
d = fscanf(in, "%s %s %s %i", mas[k].name, mas[k].surname, mas[k].otchestvo, &mas[k].nomer);
while (d==4)
{
printf("%s %s %s %i\n", mas[x].name, mas[x].surname, mas[x].otchestvo,mas[x].nomer);
x++;
c++;
if (n_u>=n_a)
{
if (people *mas2 = (people*)realloc(mas,sizeof(people)*2))
{
mas = mas2;
n_a *=2;
}
else if (people *mas2 = (people*)realloc(mas,sizeof(people)+1))
{
mas = mas2;
n_a++;
}
}
d = fscanf(in,"%s %s %s %i", mas[x].name, mas[x].surname, mas[x].otchestvo,&mas[x].nomer);
}
qsort(mas,10,sizeof(char),compare);
fclose(in);
return 0;
}Решение задачи: «Сортировка структуры по алфавиту»
textual
Листинг программы
(int(*)(const void*,const void*)) strcmp
Объяснение кода листинга программы
В представленном коде выполняется сортировка структур по алфавиту. В функции compare используется функция сравнения strcmp, которая сравнивает строки. Эта функция возвращает отрицательное значение, если первая строка меньше второй, положительное значение, если первая строка больше второй, и ноль, если строки равны. Функция compare вызывается в функции qsort в качестве аргумента сравнения. Функция qsort сортирует массив структур array на основе функции сравнения compare.