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 :

Curiosité avec strcmp oumauvais codage ?


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 126
    Par défaut Curiosité avec strcmp oumauvais codage ?

    Bon, j'ai un petit soucis avec un programme. Celui-ci fonctionne très bien :
    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
    #include <iostream>
    using namespace std;
     
    void lecture_chaine(char chaine[]) {
    	cout << "Entrez la chaine de caractère : ";
    	cin >> chaine;
    }
     
    int detection(char *chaine) {
    	int i;
    	int compteur = 0;
    	int longueur_chaine = 0;
     
    	longueur_chaine = strlen(chaine);
     
    	for(i=0; i<longueur_chaine+1; ++i) {
    		cout << *(chaine+i) << endl;
    		if(*(chaine+i) == 'a')
    			++compteur;
    	}
     
    	return compteur;
    }
     
     
    int main() {
    	int nb_de_a = 0;
    	char chaine1[99];
     
    	lecture_chaine(chaine1);
    	nb_de_a = detection(chaine1);
     
    	cout << "Le nombre de lettre a est de : " << nb_de_a << endl;
     
    	return 0;
    }
    Par contre dans la fonction détection, si je remplace mon if(*(chaine+i) == 'a') par un if(strcmp(chaine+i, "a") == 0) en ayant chargé cstring avec #include, ça fonctionne mal. Quelqu'un a-t-il une idée ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Le premier compare le caractère chaine[ i ] au caractère 'a', le second compare la chaîne démarrant au ième caractère de chaine à la chaîne "a". Ca n'a donc rien à voir.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 126
    Par défaut
    Citation Envoyé par Laurent Gomila Voir le message
    Le premier compare le caractère chaine[ i ] au caractère 'a', le second compare la chaîne démarrant au ième caractère de chaine à la chaîne "a". Ca n'a donc rien à voir.
    Ok, et si je voulais utiliser strcmp comment je devrais m'y prendre du coup car je ne vois pas vraiment comment procéder ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu ne peux pas le faire avec strcmp, avec strcmpn, oui, mais c'est inutile. En vrai C++, tu ferais qqch du style :
    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
    #include <iostream>
    #include <string>
    #include <algorithm>
     
    std::string lecture_chaine() {
    	std::cout << "Entrez la chaine de caractère : ";
            std::string chaine;
    	std::cin >> chaine;
            return chaine;
    }
     
    template<class iterator>
    struct predicat
    {
      predicat(char element):
      :element(element)
      {}
     
      bool operator()(const iterator& iterator) const
      {
        return *iterator == element;
      }
     
      char element;
    }
     
    int main()
    {
            std::string chaine = lecture_chaine();
    	int nb_de_a = std::count_if(chaine.begin(), chaine.end(), predicat('a'));
     
    	cout << "Le nombre de lettre a est de : " << nb_de_a << endl;
     
    	return 0;
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 126
    Par défaut
    Citation Envoyé par Miles Voir le message
    Tu ne peux pas le faire avec strcmp, avec strcmpn, oui, mais c'est inutile. En vrai C++, tu ferais qqch du style :
    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
    #include <iostream>
    #include <string>
    #include <algorithm>
     
    std::string lecture_chaine() {
    	std::cout << "Entrez la chaine de caractère : ";
            std::string chaine;
    	std::cin >> chaine;
            return chaine;
    }
     
    template<class iterator>
    struct predicat
    {
      predicat(char element):
      :element(element)
      {}
     
      bool operator()(const iterator& iterator) const
      {
        return *iterator == element;
      }
     
      char element;
    }
     
    int main()
    {
            std::string chaine = lecture_chaine();
    	int nb_de_a = std::count_if(chaine.begin(), chaine.end(), predicat('a'));
     
    	cout << "Le nombre de lettre a est de : " << nb_de_a << endl;
     
    	return 0;
    }
    Ok, merci pour l'info

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

Discussions similaires

  1. Segmentation fault avec strcmp
    Par FenX. dans le forum Débuter
    Réponses: 6
    Dernier message: 10/08/2007, 08h14
  2. Prob avec Fonction de codage
    Par leCcsympas dans le forum C
    Réponses: 4
    Dernier message: 10/12/2006, 16h59
  3. comparaison avec strcmp
    Par je®ome dans le forum C
    Réponses: 9
    Dernier message: 23/05/2006, 18h09
  4. petit problème avec strcmp
    Par BnY dans le forum C
    Réponses: 74
    Dernier message: 20/04/2006, 09h07
  5. Problème avec strcmp ...
    Par Mike888 dans le forum C
    Réponses: 3
    Dernier message: 24/12/2005, 14h22

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