Tri d'une chaine de caracteres

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 705 fois - Téléchargée 35 fois

Contenu du snippet

Tri d'une chaine de caracteres

Source / Exemple :


/*
  Name: 
  Copyright: 
  Author: 
  Date: 11/06/03 13:30
  Description: Tri d'une chaine de caracteres.

  • /
#include<stdio.h> #include<stdlib.h> #define MAX 50 char *tri(char *chaine,char *retour); main() { char chaine[MAX],retour[MAX]; printf("\n Entrez votre chaine :"); gets(chaine); printf("\n La chaine triee : %s",tri(chaine,retour)); getch(); } char *tri(char *chaine,char *retour) {int tab[26],i,j; char *ret; ret=retour; for(i=0;i<26;i++) tab[i]=0; i=0; while(chaine[i] != '\0') { j=(chaine[i]-'a'); tab[j]++; i++; } for(i=0;i<26;i++) { while(tab[i] != 0) {
  • ret = 'a'+i;
tab[i]--; ret++; } }
  • ret='\0';
return retour; }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
7 novembre 2009

Comment faire afficher une chaine de caractere un à un en C sous
linux je connais en pascal mais pas en C;mon probleme ce ke je
utilise le fonction delay et il attend et après affiche tous
les caractere mais pas un à un.Merci de votre aide
Messages postés
32
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
4 décembre 2003

C'est ce que je dis, le code fonctionne, mais il ne fonctionne QU'avec des caractères de 'a' à 'z' !

Si on rentre un espace, une majuscule ou un chiffre par exemple :
- ce caractère ne va pas être restitué dans la chaine triée retournée, ce qui n'est pas encore trop grave, même si on peut s'étonner qu'il disparaisse...
- le plus grave, c'est que le programme écrit dans de la mémoire qui ne lui appartient pas (tab[j]++; avec j hors limite) ...
Messages postés
2
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
21 mai 2019

Le code fonctionne tres bien avec des caracteres allant de a à z !
Messages postés
32
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
4 décembre 2003

Sans l'avoir testé, j'ai l'impression que ce code est buggé : dans la boucle de remplissage de "tab", pour des caractères < 'a', j < 0 ! Pour des caractères > 'z', j > 25 et on est à nouveau hors-tableau !

Si tu veux conserver cet algo, y'a 2 solutions : allouer 256 caractères pour "tab" (=> taux d'utilisation de la mémoire allouée assez faible, mais bon ça ne fait qu'1 Ko), ou bien vérifier que j est dans les bonnes limites (=> tu laisse tomber les caractères en dehors des limites)...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.