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

Signaler
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
-
cs_ratp
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
-
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

10 réponses

Messages postés
14742
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 février 2020
91
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...
Messages postés
14742
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 février 2020
91
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...
Messages postés
14742
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 février 2020
91
Regarde la fonction qsort sur MSDN

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007

C'est un tableau de chaines de caractères (char * tableau[50])



merci d'avance de ton aide


RATP
Messages postés
14742
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 février 2020
91
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...
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007

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
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007

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
Messages postés
61
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
5 août 2008

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.
Messages postés
61
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
5 août 2008

oups, deja repondu le temps kje mette ma reponse
Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007

merci de ton aide.

RATP