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 :

comparaison de deux chaines de caractères


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut comparaison de deux chaines de caractères
    bonjour,
    Je souhaite comparer deux chaines de caractères entrées par l'utilisateur.
    L'idée est donc de comparer caractère par caractère (mais sans utiliser strcmp) ;
    Voici le code ( j'utilise des fonctions) :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include<string.h>
    #include<iostream.h>
     
     
    int longueur(char ch[])
    //lg d'une chaîne de car.
    {
    	int i=0 ;
    	while (ch[i] != '\0')
    	{
    		i++ ;
    	}
    	return (i) ;	
    }
     
    bool compare(char ch1[], char ch2[])
    //compare deux chaînes de car.
    {
    	if (longueur(ch1) != longueur(ch2))
    		return false ;
    	int i=0 ;
    	while (ch1[i] == ch2[i])
    		i++ ;
    	if (i == longueur(ch1))
    		return true ;
    	else 
                    return false ;
    }
     
    main()
    {
    	char ch1[50], ch2[50] ;
    	cout << "Entrez une premiere chaine de caracteres :" ;
    	cin >> ch1 ;
    	cout << "Entrez une deuxieme chaine de caracteres :" ;
    	cin >> ch2 ;
            if (compare(ch1, ch2) == true)
    		cout << "les deux chaines sont egales" << endl ;
    	else cout << "les deux chaines sont différentes" << endl ;
    }
    or le programme me sort toujours que les deux chaines sont différentes.
    J'ai du mal à voir d'ou ca vient.

    Merci bcp de m'aider.

  2. #2
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Salut !!!

    Pourquoi ne pas vouloir utiliser 'strcmp' et réinventer la roue ? En plus, ça ressemble plus à du C qu'à du C++ (l'utilisation des char et pas de string) ...

    Marco85
    If you cannot explain a concept to a six year-old, then you do not fully understand it. [Albert Einstein]

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut ouais mais..
    effectivement, j'ai deja fait du C++ (en iut info) et là, pour cette année d'études, on voit toutes les bases et en effet ca passe par le C...
    bref, sinon, le pb c'est qu'on ne DOIT PAS utiliser strcmp, dc on doit se débrouiller comme on peut et donc j'ai ce souci..;

    Merci

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 161
    Points
    161
    Par défaut
    Je ne vois pas non plus l'intérêt de faire ça. Et quand je vois le #include <iostream.h>, ça n'est pas rassurant ...


    Pour en revenir à ton algo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool compare(char ch1[], char ch2[])
    //compare deux chaînes de car.
    {
       if (longueur(ch1) != longueur(ch2))
          return false ;
       int i=0 ;
       while (ch1[i] == ch2[i])
          i++ ;
       if (i == longueur(ch1))
          return true ;
       else
                    return false ;
    }
    - Tu fais deux appels à longueur(ch1). Sauf optimisation du compilateur (dont je doute), c'est du temps perdu. Mais ce n'est là qu'un problème d'optimisation...
    - L'origine de ton erreur : quand tu fais le test "while (ch1[i] == ch2[i])", rien ne te garanti que tu travail dans la chaine (je veux dire, que i <= longueur(ch1) ).
    De plus, tu peux savoir d'après ton code que : ch1[longueur(ch1)] == '\0' et ch2[longueur(ch2)] == '\0'. Donc tu ne risque pas de sortir de la boucle lorsque i == longueur(ch1) !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut modif mais sans succès
    alors,

    j'initialise i avant le while(..), donc je pense que ca ca doit etre bon..
    Aussi j'ai modifié comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool compare(char ch1[], char ch2[])
    //compare deux chaînes de car.
    {
       if (longueur(ch1) != longueur(ch2))
          return false ;
       int i=0 ;
       while ( (ch1[i] == ch2[i]) || (i == longueur(ch1)) )
          i++ ;
       if (i == longueur(ch1))
          return true ;
       else
                    return false ;
    }

    mais ca me fait toujours pareil..
    PS : et c'est pareil pour la fonction longueur, le but était de ne pas utiliser strlen mais cette fonction marche..

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 161
    Points
    161
    Par défaut
    Je renouvelle ma remarque : qu'est-ce qui te dis que ch1[i] fais toujours parti de ta chaine ?

    Si les chaines sont différentes tu sort de la boucle while, et tu renvoi faux. Si les chaines sont identiques, tu reste dans la boucle while ...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    oui oui c vrai, j'ai rajouté une mauvaise condition dans mon while :
    j'ai remodifié comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool compare(char ch1[], char ch2[])
    //compare deux chaînes de car.
    {
       if (longueur(ch1) != longueur(ch2))
          return false ;
       int i=0 ;
       while ( (ch1[i] == ch2[i]) && (i != longueur(ch1)) )
          i++ ;
       if (i == longueur(ch1))
          return true ;
       else
                    return false ;
    }
    et visiblement cela a l'air maintenant de fonctionner..

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison de deux chaines de caractères
    Par t.soufian dans le forum Langage
    Réponses: 16
    Dernier message: 06/04/2012, 13h48
  2. Comparaison de deux chaines de caractères
    Par khaled.mann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/06/2009, 11h00
  3. Problème de Comparaison de deux chaines de caractéres
    Par developppez dans le forum Requêtes
    Réponses: 10
    Dernier message: 16/03/2009, 16h21
  4. comparaison de deux chaines de caractères
    Par Toomaaaaa dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2008, 18h03
  5. comparaison de deux chaines de caractères en asp
    Par MortDansLAme dans le forum ASP
    Réponses: 7
    Dernier message: 10/01/2008, 12h36

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