Qsort fonctionnement?

Résolu
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 24 oct. 2006 à 20:33
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 25 oct. 2006 à 19:49
Bonjour a tous,

Voila, je voudrai trier ce tableau :
char nt[][100] = {"un","trois","quatre","cinq","a","bb","b","axxxxxxxxxxxxxxxxxxx"};

Avec la fonction standart qsort :s. Voici donc comment je l'utilise :

qsort(nt,8,sizeof(1),strcmp);

Ne vous souciez pas du sizeof(1), en faite quand je fait ça, ça trie sans prendre en compte la taille des donnée. Le soucis est que mon tableau reste comme il est. Je pense qu'il faut faire un pointeur sur la fonction strcmp, mais bon je voi pas trop. J'ai commencé ceci

typedef int(ptStrcmp)(const void * pt1, const void * pt2);

suis-je sur la bonne voi ?

Merci d'avance.

++
deck_bsd

[http://deck-bsd.eurower.net]

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 oct. 2006 à 21:26
// Fonction de laurent, sans les * en trop
int compare(const void * pt1, const void * pt2)
{
  return strcmp((char*)pt1, (char*)pt2);
}

int main()
{
  char nt[][100] = {"un","trois","quatre","cinq","a","bb","b","axxxxxxxxxxxxxxxxxxx"};
  qsort(nt,8, 100,compare);
}

Evidemment, avez sizeof(1) à la place de 100, ça marche moins bien ;)

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
24 oct. 2006 à 21:16
Faudrait pas faire un truc du genre
int compare(const void * pt1, const void * pt2)
{
    return strcmp(*(char *)pt1, *(char*)pt2);
} ?
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
24 oct. 2006 à 22:09
Ne vous souciez pas du sizeof(1), en faite quand je fait ça, ça trie sans prendre en compte la taille des donnée. ?
 -> le sizeof() c'est pas pour toi c'est pour lui..

rrk275
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
25 oct. 2006 à 17:12
en faite le sizeof(1) fonctionnai , mais pas pour un tab 2 dim. Enfin bref, cela fonctionne. Merci

++
deck_bsd

[http://deck-bsd.eurower.net]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 oct. 2006 à 19:49
sizeof(1) marchera pour un int[], mais pas pour un char[].
De manière générale, il faut faire
qsort(nt,sizeof nt / sizeof nt[0], sizeof nt[0],compare);
quel que soit le type de nt

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Rejoignez-nous