आप के रूप में आप
int compare(const void *s1, const void *s2)
{
struct employee *e1 = (struct employee *)s1;
struct employee *e2 = (struct employee *)s2;
int gendercompare = strcmp(e1->gender, e2->gender);
if (gendercompare == 0) /* same gender so sort by id */
return e1->id - e2->id;
else
return -gendercompare; /* the minus puts "male" first as in the question */
}
की आवश्यकता होती है और फिर मानक पुस्तकालय से qsort का प्रयोग कर एक सॉर्टिंग समारोह है कि structs तुलना लागू करने के लिए की आवश्यकता होगी।
qsort(data, count, sizeof(struct employee), compare);
अंदर से काम आप आईडी बराबर होने के लिए जाँच करने के लिए चाहते हो सकता है, तो आप का नाम (भी strcmp()
का प्रयोग करके) जैसे आप चाहें द्वारा सॉर्ट कर सकते हैं की तुलना करें।
केन
संपादित करें: बस संकलित और इसे ठीक करें। यह एक छोटा सा परीक्षण कार्यक्रम
#include <stdio.h>
#include <stdlib.h>
struct employee{
char gender[13];
char name[13];
int id;
};
int compare(const void *s1, const void *s2)
{
struct employee *e1 = (struct employee *)s1;
struct employee *e2 = (struct employee *)s2;
int gendercompare = strcmp(e1->gender, e2->gender);
if (gendercompare == 0) /* same gender so sort by id */
return e1->id - e2->id;
else
return -gendercompare;
}
main()
{
int i;
struct employee info[]={{"male","Matt",1234},{"female","Jessica",2345},{"male","Josh",1235}};
for (i = 0; i < 3; ++i)
printf("%d\t%s\t%s\n", info[i].id, info[i].gender, info[i].name);
qsort(info, 3, sizeof(struct employee), compare);
for (i = 0; i < 3; ++i)
printf("%d\t%s\t%s\n", info[i].id, info[i].gender, info[i].name);
}
है उत्पादन के साथ:
$ ./a.exe
1234 male Matt
2345 female Jessica
1235 male Josh
1234 male Matt
1235 male Josh
2345 female Jessica
मुझे लगता है कि हम "संख्यात्मक क्रम से उप क्रम" चाहते हैं – dreamcrash
यहां एक तरह का सवाल है लेकिन कहें कि मैं एक फ़ंक्शन परिभाषित करता हूं। मैं उस समारोह में कर्मचारी जानकारी के शंकु कैसे पास करूं? – bardockyo
अगर किसी को यह समझने में समस्या है, तो https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxbd00/qsort.htm का संदर्भ ले सकते हैं –