IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comparer deux chaines de caractères


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 64
    Points
    64
    Par défaut Comparer deux chaines de caractères
    Bonjour ,
    J'ai ecris ce bout de code , le programme doit tester la valeur nom1 si elle est égale à nomt , mais quand j'entre la valeur de nomt , il me donne le message d'erreur que j'ai mis (meme si la valeur est correct , il ne l'est pas pour le prog )
    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
     
    #include <iostream>
    using namespace std ;
     
    void main () {
     
    	char nom1[9] ;
    	char nomt[9]="bonjour+++" ;
    	char word[]="code incorrect\n" ;
        char word2[]="correct , c'est le vrai code" ;
    cout <<  "welcome\n" ; 
    cout << "Entrez le code (!!) :\n" ;
    cin >> nom1 ;
    if (nom1==nomt)  cout << word2 ;
    else cout << word ;
    }
    Merci

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Déjà, en C++, il est préférable d'utiliser les std::string plutot que les tableaux de char

    Et, avec une std::string, tu pourras effectuer un test du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(chaine1==chaine2)
    {
    }
    Par contre, Si tu décide d'utiliser un tableau de char comme chaine de caractères (chaines "C style"), alors, il faut utiliser le système de comparaison "C style"...

    Et cela se fait avec un strcmp
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    c'est normal avec cette condition tu testes si le pointeur nom1 est le meme que le pointeur nomt ce qui est evidemment pas le cas
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 64
    Points
    64
    Par défaut oui mais comment
    pour koala01 :
    comment faire pour utiliser std::string , ou comment faire la condition du "c style" ?

    pour hiko-seijuro :
    Je teste le pointeur nom1 lorcequ'il est remplit par le contenu de cin >> , normalement il doit marcher

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	char nomt[9]="bonjour+++" ;
    Là il y a déjà un gros problème, tu initialises un tableau de 9 char avec 10 char !

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    L'utilisation de la std::string est simple:
    inclusion du fichier <string>
    utilisation de std::string ou de string (apres un usign namespace std)

    Pour le reste, on peut tres bien faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string str="machin";
    str+=" brol";
    (...)
    if(str==str2)//ou str2 serait une autre chaine dont la valeur est définie
    En "C style", il faut utiliser strcmp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(strcmp(tab1,tab2)==0)
    {
        //tab1 et tab2 ont des valeurs identiques
    }
    else
    {
        //tab1 et tab2 ont des valeurs différentes
        // (ex: "titi" et "toto")
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    rempli ou pas rempli ca change rien ce que tu compares c'est l'adresse de nom1 avec l'adresse de nomp
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    cin >> nom1 ;
    Faille de sécurité.
    Boost ftw

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    En résumé :

    Pour comparer 2 chaines de caractère (type char *), utilise strcmp().
    Donc au lieu de ton
    qui compare les adresses du premier octet de chaque chaîne de caractère
    tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // #include <string.h>
    //...
    strcmp (nom1, nomt);

  10. #10
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par G-OnZa
    En résumé :

    Pour comparer 2 chaines de caractère (type char *), utilise strcmp().
    Donc au lieu de ton
    qui compare les adresses du premier octet de chaque chaîne de caractère
    tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // #include <string.h>
    //...
    strcmp (nom1, nomt);
    La solution de koala est meilleure : std::string, pas de char*

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Entièrement d'accord avec toi, mais je réponds juste à sa question.

Discussions similaires

  1. Comparer deux chaine de caractères (vérification de mon algo svp)
    Par beegees dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 09/10/2007, 01h10
  2. Comparer deux chaines de caractères
    Par xenos dans le forum Delphi
    Réponses: 5
    Dernier message: 18/06/2007, 11h01
  3. Réponses: 4
    Dernier message: 08/09/2006, 09h41
  4. Comparer deux chaines de caractères dans un if ?
    Par Xplosif² dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2006, 19h21
  5. comparer deux chaines de caractères
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 14h31

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