Help.... probleme avec un programme de tri de char [Résolu]

Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
- - Dernière réponse : cs_ratp
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
- 27 juil. 2005 à 15:49
Es ce que vous pouvez m'aider.

j'ai réaliser un programme qui normalement doit permettre de trier les caracteres. mais sa ne marche pas.

merci de m'aider



clude <stdio.h>

#include <string.h>



void echanger(char *tableau[], int i,int j)

{

char *tempo;



tempo=tableau[i];

tableau[i]=tableau[j];

tableau[j]=tableau[i];



}



void tri_chaine(char *tableau[],int longueur)

{

int i,j;



for(j=0;j<longueur;j++)

{

for(i=0;i<longueur;i++)

{

if(strcmp(tableau[i],tableau[j])<0);

}

}

}



void main(void)

{

char *tableau[50];



printf("Veuillez saisir une chaine\n");

gets(tableau);



tri_chaine(tableau,50);



for(i=0;i<50;i++)

{

printf("%c",tableau[i]);

}

}

RATP
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
14539
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2019
88
3
Merci
Mise à part les lignes std::cout ..., c'est du C mon code...

Mais bon... j'ai corrigé ton code:



void echanger(char *tableau, int i,int j)

{

char tempo;



tempo=tableau[i];

tableau[i]=tableau[j];

tableau[j]=tempo; // et non pas tableau[i]

}



void tri_chaine(char *tableau,int longueur)

{

int i,j;



for(j=0;j<longueur;j++)

for(i=0;i<longueur;i++)

{

if(tableau[i]<tableau[j]) // et non pas un if qui ne fait rien

echanger(tableau,i,j);

}

}



void main(void)

{

char tableau[50]; // une seule chaine de caractères

int i;



printf("Veuillez saisir une chaine\n");

gets(tableau);



tri_chaine(tableau,strlen(tableau)); // taille = nb carac et non pas 50



for(i=0;i<strlen();i++)

printf("%c",tableau[i]);



getchar(); // juste pour voir le résultat

}


Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 136 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BunoCS
Messages postés
14539
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2019
88
0
Merci
c'est un tableau de chaines de caractères (char * tableau[50])

ou une seule chaine de caractère (char tableau[50])

que tu veux faire?



Dans le deuxième cas, tu as juste à enlever toutes les étoiles, plus quelques aménagements peut-être

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
14539
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2019
88
0
Merci
Regarde la fonction qsort sur MSDN

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
0
Merci
C'est un tableau de chaines de caractères (char * tableau[50])



merci d'avance de ton aide


RATP
Commenter la réponse de cs_ratp
Messages postés
14539
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2019
88
0
Merci
Voici un code pout trier une caractère dans l'ordre croissant:



#include <stdio.h>

#include



// Fonction de comparaison de 2 éléments de base (ici char)

int compare(const void *arg1, const void *arg2)

{

return ((char)arg1<(char)arg2);

}





void main(void)

{

char tab[10] = "hello";



std::cout << "Avant: "<< tab << std::endl;

qsort(tab,5,sizeof(char),compare);

std::cout << "Après: "<< tab << std::endl;

getchar();

}


Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
0
Merci
j'ai pas compris pourquoi tu m'oriente sur la fonction qsort ?



#include <stdio.h>

#include <string.h>



void echanger(char *tableau[], int i,int j)

{

char *tempo;



tempo=tableau[i];

tableau[i]=tableau[j];

tableau[j]=tableau[i];



}



void tri_chaine(char *tableau[],int longueur)

{

int i,j;



for(j=0;j<longueur;j++)

{

for(i=0;i<longueur;i++)

{

if(strcmp(tableau[i],tableau[j])<0);

}

}

}



void main(void)



{

char *tableau[50];

int i;



printf("Veuillez saisir une chaine\n");

gets(tableau);



tri_chaine(tableau,50);



for(i=0;i<50;i++)

{

printf("%s",tableau[i]);

}

}

RATP
Commenter la réponse de cs_ratp
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
0
Merci
Merci pour ce code mais je ne veut pas le faire en C++, mais en C ANSI,
je suis debutant et je voudrais passer par les fonctions C

RATP
Commenter la réponse de cs_ratp
Messages postés
61
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
5 août 2008
0
Merci
moi deja jvoi une erreur ici:
void echanger(char *tableau[], int i,int j)
{
char *tempo;

tempo=tableau[i];
tableau[i]=tableau[j];
tableau[j]=tableau[i];

}

je pense que ça devrait etre plutot ça:
void echanger(char *tableau, int i,int j)
{
char tempo;

tempo=tableau[i];
tableau[i]=tableau[j];
tableau[j]=tempo;

}

voila, je ne suis meme pas aller plus loin donc si il y a encore des probleme je regarderai.
Commenter la réponse de vladisback
Messages postés
61
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
5 août 2008
0
Merci
oups, deja repondu le temps kje mette ma reponse
Commenter la réponse de vladisback
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
0
Merci
merci de ton aide.

RATP
Commenter la réponse de cs_ratp