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