Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1199 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] Existe-t-il une fonction standart de tri alphabétique ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Existe-t-il une fonction standart de tri alphabétique ?

n°139810
the_white_​rabbit
Follow the white rabbit !
Posté le 16-05-2002 à 13:53:24  profilanswer
 

Salut les gens,  
 
  Tout est dans le titre !  
 
  Cette fonction servirait en fait à trier alphabétiquement une liste de nom ! !  
 
  Merci les gens !  :)

mood
Publicité
Posté le 16-05-2002 à 13:53:24  profilanswer
 

n°139814
El_gringo
Posté le 16-05-2002 à 14:03:39  profilanswer
 

En C Standard, non, mais y a une fonction de comparaison de chaines de char. Avec ça y a pas plus bête que d'écrire une fonction de tri par ordre alphabètique.

Code :
  1. int strcmp( const char *string1, const char *string2 );


valeurs de retour:
< 0 string1 less than string2  
0 string1 identical to string2  
> 0 string1 greater than string2  
 
y faut inclure string.h

n°139832
Tomate
Posté le 16-05-2002 à 14:21:08  profilanswer
 

f outiliser les fonctions strl*, car elles gerent les pointerus nulls, et on peut specifier le nb de caracteres (pour eviter les buffers overflow)

n°139837
try58
Posté le 16-05-2002 à 14:26:55  profilanswer
 

tu voulais surment dire strn*

n°139842
prettysmil​e
Sourire est un devoir social
Posté le 16-05-2002 à 14:30:43  profilanswer
 

qsort()        : tri d'un tableau sur lui-même (méthode:tri rapide)  
 
Prototype:  
void qsort( void * tab, size_t nt, size_t taille, int (*fcmp)(const void *px1, const void *px2));  
dans: <stdlib.h>  
 
 
Description:  
Le sous-programme qsort() trie les nt éléments du tableau tab, par la méthode quick-sort.  
 
La comparaison entre deux éléments est définie par le quatrième paramètre, qui est une fonction recevant les adresses p1 et p2 des éléments à comparer et renvoie:  
 
un entier négatif si *p1 est inférieur à *p2 + 0 si *p1 est égal à *p2  
un entier positif si *p1 est supérieur à *p2.  
 
Le paramètre taille doit indiquer la taille en octets d'un élément de tab; c'est aussi la taille des zones à échanger par l'algorithme de   tri.    
 
 
 
Voir aussi:  
     bsearch()    
 
 
Portabilité:  
DOS, UNIX, C ANSI.  
 
 
Exemple:  
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
  qsort() est d'abord utilisé pour trier un tableau de
     mots en utilisant l'ordre lexicographique lié au
     code ascii.
  Dans un deuxième exemple, un tableau d'entiers est trié
     par ordre décroissant.
  Un tableau a deux dimensions de mots est trié dans le
     dernier exemple.
*/
 
 
/* Type pointeur sur caractère */
typedef  char * Pchar;
 
/* TFcmp: Type pointeur sur fonction de comparaison */
typedef  int (* TFcmp) (const void *p1, const void *p2) ;
 
/* Deux fonctions de comparaisons */
int cmpMot( const void * m1, const void * m2);
int cmpEntier( const void * pm1, const void * pm2);
 
int main (void) {
/* Premier exemple: tableau de mots */
static Pchar liste[]={"alexandre","Aline","abel","andré","Andrée"};
/* Deuxième exemple: tableau d'entiers */
static int ti[]={ 17, 25, 21, 25, 19, 23};
/* Troisième exemple: tableaux à deux dimensions (6 colonnes) */
static char tc2[][6]={"alexa","Aline","abel ","andré","André"};
 
/* Tailles respectives de chaque tableau */
int i, nl = sizeof(liste)/sizeof(liste[0]),
       nti = sizeof(ti)/sizeof(ti[0]),
       ntc2 = sizeof(tc2)/sizeof(tc2[0]) ;
 
/* Premier tri avec la fonction de comparaison cmpMot */
printf("\nAvant tri:" );
for (i=0; i<nl; i++)   printf("  %s", liste[i]);
qsort( liste, nl, sizeof(liste[0]), cmpMot);
printf("\nAprès tri:" );
for (i=0; i<nl; i++)  printf("  %s", liste[i]);
 
/* Deuxième tri avec la fonction de comparaison cmpEntier qui permet
de trier par ordre décroissant */
printf("\n\nAvant tri:" );
for (i=0; i<nti; i++)   printf("  %d", ti[i]);
qsort( ti, nti, sizeof(int), cmpEntier);
printf("\nAprès tri:" );
for (i=0; i<nti; i++)  printf("  %d", ti[i]);
 
/* Troisième tri avec la fonction de comparaison standard strcmp */
printf("\n\nAvant tri:" );
for (i=0; i<ntc2; i++)   printf("  %s", tc2[i]);
qsort( tc2, ntc2, sizeof(tc2[0]), (TFcmp) strcmp);
printf("\nAprès tri:" );
for (i=0; i<ntc2; i++)  printf("  %s", tc2[i]);
 
printf("\n" );
return 0;
}
 
int cmpMot( const void * mot1, const void * mot2) {
return strcmp(*(Pchar*)mot1, *(Pchar*)mot2) ;
}
 
int cmpEntier( const void * p1, const void * p2) {
/* comparaison pour ordre décroissant */
typedef  const  int * PEntierConstant;
PEntierConstant pi1 = (PEntierConstant)p1,
                pi2 = (PEntierConstant)p2;
return *pi2 - *pi1 ;
}
 
 google,mon ami...

n°139854
El_gringo
Posté le 16-05-2002 à 14:42:19  profilanswer
 

tomate77 a écrit a écrit :

f outiliser les fonctions strl*, car elles gerent les pointerus nulls, et on peut specifier le nb de caracteres (pour eviter les buffers overflow)  




 
elle gèrent les pointeurs nuls !? tu veux dire quoi au juste pas là !?
et pr les buffer overflow, y suffit de pas faire n'imp, et de pas passer à ces fonctions, des chaines de char pas terminées par un caractère nul.

n°139856
Tomate
Posté le 16-05-2002 à 14:43:53  profilanswer
 

je veux dire que la fonction teste si tu lui donnes un pointeur null, ce qui peut arriver (et est valide), ce qui evite des segfault...

n°139857
El_gringo
Posté le 16-05-2002 à 14:44:00  profilanswer
 

prettysmile a écrit a écrit :

qsort()        : tri d'un tableau sur lui-même (méthode:tri rapide)  
 
Prototype:  
void qsort( void * tab, size_t nt, size_t taille, int (*fcmp)(const void *px1, const void *px2));  
dans: <stdlib.h>  
 
 
Description:  
Le sous-programme qsort() trie les nt éléments du tableau tab, par la méthode quick-sort.  
 
La comparaison entre deux éléments est définie par le quatrième paramètre, qui est une fonction recevant les adresses p1 et p2 des éléments à comparer et renvoie:  
 
un entier négatif si *p1 est inférieur à *p2 + 0 si *p1 est égal à *p2  
un entier positif si *p1 est supérieur à *p2.  
 
Le paramètre taille doit indiquer la taille en octets d'un élément de tab; c'est aussi la taille des zones à échanger par l'algorithme de   tri.    
 
 
 
Voir aussi:  
     bsearch()    
 
 
Portabilité:  
DOS, UNIX, C ANSI.  
 
 
Exemple:  
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
  qsort() est d'abord utilisé pour trier un tableau de
     mots en utilisant l'ordre lexicographique lié au
     code ascii.
  Dans un deuxième exemple, un tableau d'entiers est trié
     par ordre décroissant.
  Un tableau a deux dimensions de mots est trié dans le
     dernier exemple.
*/
 
 
/* Type pointeur sur caractère */
typedef  char * Pchar;
 
/* TFcmp: Type pointeur sur fonction de comparaison */
typedef  int (* TFcmp) (const void *p1, const void *p2) ;
 
/* Deux fonctions de comparaisons */
int cmpMot( const void * m1, const void * m2);
int cmpEntier( const void * pm1, const void * pm2);
 
int main (void) {
/* Premier exemple: tableau de mots */
static Pchar liste[]={"alexandre","Aline","abel","andré","Andrée"};
/* Deuxième exemple: tableau d'entiers */
static int ti[]={ 17, 25, 21, 25, 19, 23};
/* Troisième exemple: tableaux à deux dimensions (6 colonnes) */
static char tc2[][6]={"alexa","Aline","abel ","andré","André"};
 
/* Tailles respectives de chaque tableau */
int i, nl = sizeof(liste)/sizeof(liste[0]),
       nti = sizeof(ti)/sizeof(ti[0]),
       ntc2 = sizeof(tc2)/sizeof(tc2[0]) ;
 
/* Premier tri avec la fonction de comparaison cmpMot */
printf("\nAvant tri:" );
for (i=0; i<nl; i++)   printf("  %s", liste[i]);
qsort( liste, nl, sizeof(liste[0]), cmpMot);
printf("\nAprès tri:" );
for (i=0; i<nl; i++)  printf("  %s", liste[i]);
 
/* Deuxième tri avec la fonction de comparaison cmpEntier qui permet
de trier par ordre décroissant */
printf("\n\nAvant tri:" );
for (i=0; i<nti; i++)   printf("  %d", ti[i]);
qsort( ti, nti, sizeof(int), cmpEntier);
printf("\nAprès tri:" );
for (i=0; i<nti; i++)  printf("  %d", ti[i]);
 
/* Troisième tri avec la fonction de comparaison standard strcmp */
printf("\n\nAvant tri:" );
for (i=0; i<ntc2; i++)   printf("  %s", tc2[i]);
qsort( tc2, ntc2, sizeof(tc2[0]), (TFcmp) strcmp);
printf("\nAprès tri:" );
for (i=0; i<ntc2; i++)  printf("  %s", tc2[i]);
 
printf("\n" );
return 0;
}
 
int cmpMot( const void * mot1, const void * mot2) {
return strcmp(*(Pchar*)mot1, *(Pchar*)mot2) ;
}
 
int cmpEntier( const void * p1, const void * p2) {
/* comparaison pour ordre décroissant */
typedef  const  int * PEntierConstant;
PEntierConstant pi1 = (PEntierConstant)p1,
                pi2 = (PEntierConstant)p2;
return *pi2 - *pi1 ;
}
 
 google,mon ami...  




 
génial cette fonction, en standard, j'aurais pas cru que ça existait !

n°139941
LeGreg
Posté le 16-05-2002 à 16:29:43  profilanswer
 

ah, zut c'est pas du C++..

n°139957
the_white_​rabbit
Follow the white rabbit !
Posté le 16-05-2002 à 16:56:04  profilanswer
 

prettysmile, t'es un chef ! Ta fonction marche nikel  :sol:  
 
   :jap: Merci :jap:

mood
Publicité
Posté le 16-05-2002 à 16:56:04  profilanswer
 

n°139960
prettysmil​e
Sourire est un devoir social
Posté le 16-05-2002 à 17:00:52  profilanswer
 

:sol:

n°139969
El_gringo
Posté le 16-05-2002 à 17:10:57  profilanswer
 

The_White_Rabbit a écrit a écrit :

prettysmile, t'es un chef ! Ta fonction marche nikel  :sol:  
 
   :jap: Merci :jap:  




 
Ouais, enfin, c pas lui que l'as écrite non plus !  :D

 

[jfdsdjhfuetppo]--Message édité par el_gringo le 16-05-2002 à 17:11:08--[/jfdsdjhfuetppo]

n°139976
prettysmil​e
Sourire est un devoir social
Posté le 16-05-2002 à 17:17:34  profilanswer
 

non, elle ne l a pas ecrite mais au moins elle sait chercher sur google (faut lire les post jusqu au bout, g pas revendique la maternite du petit)  ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] Existe-t-il une fonction standart de tri alphabétique ?

 

Sujets relatifs
Cookies et php: je débute et la fonction de recherche est morte :DMéthode ou fonction dans une requête
[C++] Definition de fonction avec un & ???ASP : RE-recupérer la valeur que renvoi une fonction
ASP - recupérer la valeur que renvoit une fonction[JavaScript]A par setInterval et setTimeout, existe t'il d'autre ....
[Delphi] Fermer un service : fonction CloseServiceHandle & coProblème avec la fonction qsort() en langage C !
[javascript] fonction onChange=onBlur ?les fonction en c
Plus de sujets relatifs à : [C] Existe-t-il une fonction standart de tri alphabétique ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR