Help.... probleme avec un programme de tri de char

Résolu
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 à 14:56
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

10 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
27 juil. 2005 à 15:38
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...
3
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
27 juil. 2005 à 15:10
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...
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
27 juil. 2005 à 15:14
Regarde la fonction qsort sur MSDN

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
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:14
C'est un tableau de chaines de caractères (char * tableau[50])



merci d'avance de ton aide


RATP
0

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

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
27 juil. 2005 à 15:25
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...
0
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:27
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
0
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:29
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
0
vladisback Messages postés 61 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 5 août 2008
27 juil. 2005 à 15:40
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.
0
vladisback Messages postés 61 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 5 août 2008
27 juil. 2005 à 15:46
oups, deja repondu le temps kje mette ma reponse
0
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
merci de ton aide.

RATP
0
Rejoignez-nous