Manthis
Messages postés40Date d'inscriptionvendredi 21 décembre 2001StatutMembreDernière intervention 2 octobre 2006
-
20 avril 2006 à 21:35
gagah1
Messages postés509Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 3 août 2010
-
22 avril 2006 à 09:57
Bonjour,
Je poste ce message car je n'arrive pas à trouver de solution à mon
problème. En fait j'ai un tableau de chaînes de caractères (un char **)
que je voudrais trier par ordre alphabétique.
Quelqu'un pourrait-il m'expliquer comment je peux faire ça?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 21 avril 2006 à 11:40
#include "stdlib.h"
#include "string.h"
int compare(const void *, const void *);
void Tri(char * Array[], unsigned int n)
{
qsort( (char **)Array, n, sizeof(char *), compare);
return;
}
zied86
Messages postés85Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention 4 août 2014 21 avril 2006 à 00:29
tu peux utiluser la fonction "strcmp" qui compare deux chaine de caractere dans la bibliotheque <string.h>.
et voila un exemple de tri
for(i=(l-1);i>0;i=fin)/**l est le nombre d'element***/
{fin=0;
for(j=0;j<i;j++)
if(strcmp(livre[j+1],livre[j])<0)
{fin=j;
//permutation
p=livre[j];
livre[j]=livre[j+1];
livre[j+1]=p;
}
}
Manthis
Messages postés40Date d'inscriptionvendredi 21 décembre 2001StatutMembreDernière intervention 2 octobre 2006 21 avril 2006 à 12:08
Merci beaucoup Ombitious_Developper c'est exactement ce que je cherchais: un tri de tableau en deux fonctions et en plus en utilisant l'algorithme qsort.
Encore mille merci et je suis vraiment bluffé par le nombre de gens qui ont répondu, merci à tous...
gagah1
Messages postés509Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 3 août 2010 21 avril 2006 à 19:16
qsort( (char **)Array, n, sizeof(char *), compare);
ATTENTION: sizeof(char*) retourne 4 octets. Vaut mieux remplacer par la taille maximale de la chaine.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 22 avril 2006 à 00:01
Salut :
1- Pour 530875 Zootella les comparaisons avec la fonctions "strcmp" sont nécessaires, voire obligatoires.
En effet un seul caractère ne permet pas de décider si une chaine est supérieure à une autre - Pensez au cas où les deux chaines commencent par la même lettre -
Comment faire ? il faut faire des strcmp pour résoudre cette problème.
Tant qu'il égalité on passe aux prochaines lettres.(on doit comparer toutes les chaînes)
2- Pour =128209 gagah1 On a tableau de chaines de caractère, càd de type char ** : c'est un tableau contenant les adresses des chaines de caractères sauvegardées quelque part dans la mémoire. Donc il doit contenir des adresses Pourqu' une case accueille une adresse on réserve 4 octes qui n'est autre que sizeof(char *).
Personnellement je préfère sizeof(char *) au lieu de 4 car c'est plus général et plus générique Dieu seul sait si l'adresse d'un pointeur va être toujours 4 octets.