khr1s Δημοσ. 12 Ιανουαρίου 2015 Δημοσ. 12 Ιανουαρίου 2015 Γεια σας συμφορουμιτες . Εχω φαει το κεφαλι μου εδω και 2 μερες και ακρη δεν βγαζω. Εχω το εξης struct: typedef struct { char eng[30];//μια αγγλικη λεξη char gr[30];//μια ελληνικη λεξη } oros; και επειτα δημιουργω εναν πινακα: oros index[10000]; int index_size;//το χρησιμοποιουμενο μερος του πινακα Το θεμα ειναι οτι επειδη φτιαχνω κατι σαν ενα μικρο λεξικο, θελω να μπορεσω να ταξινομισω τα στοιχεια(oros) του πινακα lex με βαση την μεταβλητη char gr[30] τους. Πως θα μπορεσει να γινει κατι τετοιο?Προσπαθω να κανω χρηση της qsort() αλλα τα βρισκω σκουρα στο καλεσμα της. void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) Αυτος ειναι ο ορισμος της. Πως μπορω να την καλεσω εγω ? Εχω σκεφτει κατι τετοιο : qsort(index, index_size, sizeof(oros), strcmp); Ευχαριστω προκαταβολικα
albNik Δημοσ. 12 Ιανουαρίου 2015 Δημοσ. 12 Ιανουαρίου 2015 Φτιαχνεις μια compar(const void *, const void*) που επιστρέφει 1,-1, ή 0. Βασικα καλει την strcmp(char*, char*). int compar( const void* arg1, const void* arg2 ) { oros* o1= (oros*) arg1; oros* o2= (oros*) arg2; return strcmp(o1->eng, o2->eng); }
khr1s Δημοσ. 12 Ιανουαρίου 2015 Μέλος Δημοσ. 12 Ιανουαρίου 2015 Φτιαχνεις μια compar(const void *, const void*) που επιστρέφει 1,-1, ή 0. Βασικα καλει την strcmp(char*, char*). int compar( const void* arg1, const void* arg2 ) { oros* o1= (oros*) arg1; oros* o2= (oros*) arg2; return strcmp(o1->eng, o2->eng); } Σε ευχαριστω Eπειτα η κληση της qsort θα γραφτει με τον τροπο που εγραψα παραπανω και απλα η compar θα μπει ως τελευταια παραμετρος ? Δηλαδη : qsort(index, index_size, sizeof(oros), compar);
albNik Δημοσ. 12 Ιανουαρίου 2015 Δημοσ. 12 Ιανουαρίου 2015 Σωστό φαίνεται (compar στο τελος). http://www.tutorialspoint.com/c_standard_library/c_function_qsort.htm
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα