Se connecter avec
S'enregistrer | Connectez-vous
Votre question

Ordonner les caracteres d'une chaine par ordre alphabetique.

Dernière réponse : dans Programmation
Partagez
22 Octobre 2012 23:43:24

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");
}
24 Octobre 2012 10:11:34

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.
m
0
l
24 Octobre 2012 20:31:31

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.
m
0
l
Contenus similaires
24 Octobre 2012 23:39:15

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.
m
0
l
a b L Programmation
29 Octobre 2012 11:08:11

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.
m
0
l
30 Octobre 2012 07:43:25

talybadara a dit :
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.


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: http://www.siteduzero.com/tutoriel-3-419199-les-contene...

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 : http://developer.gnome.org/glib/stable/glib-Hash-Tables...
m
0
l