1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2017
    Messages : 50
    Points : 29
    Points
    29

    Par défaut Sur le code ASCII en langage C

    Dans l'intention de classer des caractères par ordre alphabétique j'utilise leur code ASCII.
    Maintenant Dans l'intention de classer des mots (chaines de caractères) par ordre alphabétique,
    comment obtenir la valeur numérique correspondant à ma chaîne.
    merci d'avance!

  2. #2
    Responsable Modération
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    7 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 069
    Points : 22 362
    Points
    22 362

    Par défaut

    Bonjour et bienvenue,

    Il faut utiliser strcmp() (String Compare), qui sert à cela.

    Sinon, si tu veux écrire cette fonction toi-même, il suffit de comparer deux à deux les caractères respectifs de tes chaînes, en commençant par le premier de chacune d'elle. S'ils sont différent, la comparaison s'arrête là, avec le résultat. S'ils sont égaux, tu passes aux suivants et tu refais le même test, jusqu'à la fin si nécessaire.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 927
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 5 927
    Points : 16 384
    Points
    16 384
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Toogda Voir le message
    comment obtenir la valeur numérique correspondant à ma chaîne.
    Bonjour

    Je ne suis pas certain de bien comprendre la phrase "valeur numérique correspondant à une chaine". Quelle est par exemple pour toi la valeur numérique de "toto" ???

    Si maintenant tu parles de la valeur numérique de chaque caractère de la chaine alors ça devient plus clair. En C tout est nombre. Donc si ta chaine contient (par exemple) "Bonjour" elle contient en réalité {66, 111, 110, 106, 111, 117, 114, 0}.
    Si tu affiches un caractère via printf(), l'afficher avec "%c" te donnera le caractère ascii, l'afficher avec "%d" te donnera sa valeur numérique en décimal, avec "%o" tu auras sa valeur en octal et avec "%x" tu auras sa valeur en hexadécimal.

    De là, comparer deux chaines devient trivial puisqu'il te suffit d'utiliser les opérateurs mathématiques usuels sur chaque caractère des deux chaines pris deux à deux. C'est d'ailleurs tellement trivial que comme l'a dit Obsidian, la librairie standard te propose la fonction toute faite strmp() qui fait exactement ce travail...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2017
    Messages : 50
    Points : 29
    Points
    29

    Par défaut Ok merci . j'utilise la strcmp() mais ya quelque chose qui m'échape et voulè un éclaisissement!

    utilisant le principe du tri selection
    voisi mon code pourclasser par ordre alphabétique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    //Adherent adh[] est une variable de type structure contenant un char adh_Nom[50]
    //echanger(adh,i,mini) sert a permiter adh[i] et adh[mini] 
     
    void classer_a_z(Adherent adh[], int nbt)
    {
     
        int j, i, mini;
        char tmpNom[50];
     
        for(i=0; i<nbt; i++)
        {
            mini=i;
            for(j=i+1; j<nbt; j++)
            {
                 if(strcmp(adh[mini].adh_Nom ,adh[j].adh_Nom) == 1)
                    j=mini;
                 echanger(adh,i,mini);
            }
        }
    }
    cela compile sans signaler d'errur mais ma liste reste déclasser!
    merci d'avance de m'éclaircir sur ce qui va pa!

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 196
    Points : 4 872
    Points
    4 872

    Par défaut

    Pourtant tu as 1 erreur + 1 merdouille , je te redonne le pseudo code

    Et à quoi sert ta variable tmpNom ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      procédure tri_selection(tableau t, entier n)
          pour i de 1 à n - 1
              min <- i
              pour j de i + 1 à n
                  si t[j] < t[min], alors min <- j
              fin pour
              si min != i, alors échanger t[i] et t[min]
          fin pour
      fin procédure
    Lorsque tu as trouvé une valeur minimale tu la sauvegarde min <- j.
    Et ensuite tu fais un test si tu dois échanger ou pas si min != i, alors.

  6. #6
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2009
    Messages : 553
    Points : 1 636
    Points
    1 636

    Par défaut

    Accessoirement, relis attentivement la page du manuel de "strcmp", parce que "strcmp == 1" c'est faux !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2017
    Messages : 50
    Points : 29
    Points
    29

    Par défaut A super , xa marche bien mintana!

    merci

  8. #8
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2009
    Messages : 553
    Points : 1 636
    Points
    1 636

    Par défaut

    Tant mieux !
    Et si tu partageais ton code corrigé ? Ca pourrait rendre service à quelqu'un d'autre, dans le futur...

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2017
    Messages : 50
    Points : 29
    Points
    29

    Par défaut ok! voici le code corigé!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    /** methode permettant de classer des variables de type char d'une structure Adherent par ordre alphabétique  **/
    void classer_a_z(Adherent adh[], int nbt)
    {
     
        int j, i, mini;
     
        for(i=0; i<nbt; i++)
        {
            mini=i;
            for(j=i+1; j<nbt; j++)
            {
                 if(strcmp(adh[mini].adh_Nom ,adh[j].adh_Nom) == 1)
                    mini=j;
            }
            if(i != mini)
                echanger(adh,i,mini);
        }
    }
     
    void echanger(Adherent adh[], int x, int y)
    {
        Adherent tmp;
     
        tmp = adh[x];
        adh[x] =  adh[y];
        adh[y]  = tmp;
    }
    une petite question en plus: Dans quelle domaine le language C excelle t-il en ce moment?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    26 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 26 562
    Points : 38 544
    Points
    38 544

    Par défaut

    Attention, il ne faut pas comparer la valeur retournée par strcmp() à 1, ni à quoi que ce soit d'autre que zéro, en fait, parce que le standard dit seulement "une valeur supérieure à zéro", et non pas "1".

    Tu dois donc remplacer ton if(strcmp(adh[mini].adh_Nom ,adh[j].adh_Nom) == 1) par if(strcmp(adh[mini].adh_Nom ,adh[j].adh_Nom) > 0).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2017
    Messages : 50
    Points : 29
    Points
    29

    Par défaut

    Ok cet compris!!!

Discussions similaires

  1. [Débutant] probleme afficher code ascii sur l'editeur de borland 5.02
    Par cesar333 dans le forum C++Builder
    Réponses: 1
    Dernier message: 09/09/2010, 15h47
  2. Affichage du code ascii sur 8 bits
    Par baguinga dans le forum Débuter
    Réponses: 3
    Dernier message: 18/10/2007, 20h01
  3. Code ASCII du symbole Euro
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/04/2007, 02h27
  4. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 14h04
  5. [langage] code ascii en Perl
    Par intox18 dans le forum Langage
    Réponses: 3
    Dernier message: 18/01/2005, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo