Ordonner les caracteres d'une chaine par ordre alphabetique.

talybadara

Nouveau membre
Bonsoir,
j'ai fait ce programme qui doit m'afficher une chaine ordonnée par ordre alfabetique.
Mais quand j'essaie de l'executer, il m'affiche toujours la chaine inserée et je me demande d'où viens l'erreur.
Aidez-moi s.v.p.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
char vet[6];
char aux;
int n, k, p, i;
n=6;
[ scanf("%ls\n", &vet); ] /* INSERER LA CHAINE */


[ p=n; /* ORDONNER */
do
{
k=0;
for(i=0;i<n;i++){
if(vet>vet[i++]){
aux=vet; vet=vet[i++]; vet[i++]=aux; k=1; p=i+1;
}
}
n=p;
}while(k==1 && n>1); ]

[ for(i=0;i<n;i++) /* AFFICHER LA CHAINE ORDONNé */
printf("%c", vet); ]
system("PAUSE");
}
 

tantal_fr

Grand Maître
Bonjour,

Déjà, utilise la balise code, ce sera plus lisible et conforme au règlement de la section.

Ensuite, pour ton problème, il semblerais que tu mélange tableau et élément de tableau dans tes comparaisons et affectations.
 

Tamareu

Habitué
Il y a plusieurs problèmes dans le code.

Tu dis vouloir trier par ordre alphabétique, mais il y a un souci, tu ne trie pas par ordre alphabétique, mais par ordre des valeurs de tes char, donc dans l'ordre de la table ASCII, tu auras donc le "z" majuscule, avant le "a" minuscule. Et ça, c'est pas bon.

Ensuite, ton algo en lui-même a plusieurs problèmes.

Premièrement, tu as des soucis entre emplacement dans un tableau (tab[index]) et tableau (tab). Tu donnes assignes un char* à un char, je suis déjà étonné que ton compilo passe ça sans broncher.
Ensuite ton algo de tri pourrait être plus performant (tu fais un tri par sélection visiblement, alors qu'il ne couterait pas grand chose de faire un tri fusion). Mais ça, c'est pas grave.

Donc pour reprendre, il faut que tu fasses plusieurs choses. Premièrement, il faut que tu te prépare une "hashmap" ou simplement une "map", qui fait correspondre à un caractère, un ordre alphabétique. Par exemple une std::map<char letter, int placeDansAlphabet> (ou map<string,ordre>). Ainsi, tes caractères seront des clefs de ta map, et pour obtenir l'ordre de ta lettre, tu n'as qu'à faire map[lettre].

Une fois ça fait, tu peux faire ton tri.
 

talybadara

Nouveau membre
je suis amateur et j'ai pas atteint encore ce stade (hashmap et autre).
S'il ya d'autre solution , je suis bien impatient de l'avoir.
Merci.
 

zeb

Modérateur
Merci de respecter le règlement. Utilise la balise
Code:
 pour présenter ton code.
Pour éditer un message, clique sur l'un des petits boutons en bas à droite du message à modifier.
 

Tamareu

Habitué


Salut,

Bah... c'est une assez bonne occasion pour te mettre aux map (ou tableaux associatifs en français). C'est tout simple.
C'est une structure de données qui fait correspondre un objet T à un autre objet qui est une valeur. Dans un tableau normal, tu fais correspondre un index entier, à un objet, alors que dans ton tableau associatif, tu peux considérer que ton "index", est un objet.

Pour plus d'informations, je te conseille de consulter ceci:

Tu verras, c'est super simple (bon là c'est du C++ , tu es visiblement en C, mais on trouve aussi des maps en C).

Edit: par exemple, il y a ça avec glib :
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 125
Messages
6 717 782
Membres
1 586 361
Dernier membre
Florian3549
Partager cette page
Haut