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 :

Fonction lexicographique strcmp


Sujet :

C++

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 304
    Par défaut Fonction lexicographique strcmp
    Salut; pourriez vous me dire comment je peux comparer lexicographiquement deux chaines de caractères . ou d'une autre façon est ce que la fonction strcmp de la bibliothèque [string] ne peut pas être remplacé par une autre fonction en C++ ou c la même chose en C++ que le C.

  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
    Les différents opérateurs de comparaison de std::string font une comparaison lexicographique.

    strcmp fonctionnera très bien en C++, mais std::string c'est mieux.

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Pour comparer deux string(std::string dans iostream)en C++ tu dois pouvoir utiliser l'operateur ==

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 304
    Par défaut std::string
    merci pour la réponse mais est ce que std::string est propre au c++; est que les deux point ca veut dire que c'est le C++ orienté objet.

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Le C++ est orienté objet.

    Si tu parles des deux points après std alors non cela n'a rien a voir.

    std::string -> Signifie que tu utilises un type (comme int,char)nommée string dans l'espace de nommage std (voir la faq pour ça)

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 304
    Par défaut Fonction lexicographique
    Mais on dit que le c++ couvre le c malgré que ce dernier contient des fonctions prédéfinies plus que le c++ comme isalpha, islower, toupper...

    Ma deuxième question porte sur les bibliothèque : est ce qu'on peut pas utiliser les bibliothèques string, stdlib........... en C++ et ca reste toujours dans le cadre de C++ ou ces bibliothèques sont propres à C. et quel est le remplacant en C++.

  7. #7
    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
    Par défaut
    <string.h>, <stdio.h>, <stdlib.h> sont propres à C. Les utiliser en C++ (via les entêtes <cstring>, <cstdio> et <cstdlib> pour la compabilité avec ce langage) est une mauvaise pratique, étant donné que C++ fournit de meilleures alteratives.

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 304
    Par défaut Fonction lexicographique
    et quelles sont ces alternatives qu'offr le C++ !

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque
    <string.h>, <stdio.h>, <stdlib.h> sont propres à C. Les utiliser en C++ (via les entêtes <cstring>, <cstdio> et <cstdlib> pour la compabilité avec ce langage) est une mauvaise pratique, étant donné que C++ fournit de meilleures alteratives.
    C'est quoi les alternatives en C++ 2003 à memcpy, memmove, memcmp, memchr, memset, strerror, remove, rename, tmpfile, tmpnam, fflush(NULL), perror, strtod, strtol, rand, srand, abort, getenv, system, abs, div, labs, ldiv ? J'ai pu être distrait et avoir oublié des alternatives à certaines fonctions, mais je doute que je l'ai été pour toutes.

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 304
    Par défaut Fonction lexicographique
    Mais elles font quoi ces foctions là .

  11. #11
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Jean-Marc a cité une série de fonctions présentes dans le C et le C++, pour lesquelles le C++ ne présente pas (ou pas encore...) d'alternative directe plus aisée à manipuler.

    Maintenant, il est vrai que si toute la bibliothèque standard du C est reprise de façon presque identique en C++, il y a des domaines où il y a des alternatives meilleures. L'équivalent de strcmp, ce sont les opérateur <, >, ==, !=, <=, >= que le C++ permet d'appliquer sur des std::string.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  12. #12
    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
    Par défaut
    et quelles sont ces alternatives qu'offr le C++ !
    Apprends le C++ et tu le sauras.
    Après si t'as des questions plus précises, on peut répondre aussi.

    C'est quoi les alternatives en C++ 2003 à memcpy, memmove [...]
    C'était une façon de parler. Toutes les fonctionnalités ne sont pas redéfinies avec des bibliothèques C++ standard. Certaines parce que ça n'apporterait rien et d'autre parce que ça n'a pas de sens d'avoir des trucs si bas niveau, on préfère des outils plus génériques. (pour tes trucs par contre on trouve relativement facilement les équivalents, std::copy et autres algorithmes remplacent memcpy et compagnie -- les conversions se font en C++ avec les flux -- et l'entrée sortie avec les flux aussi, donc fflush n'a pas d'intérêt)
    N'empêche que rien qu'en les enrobant dans du C++, on obtient des avantages pour la plupart.

  13. #13
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque
    Toutes les fonctionnalités ne sont pas redéfinies avec des bibliothèques C++ standard. Certaines parce que ça n'apporterait rien
    Nous sommes bien d'accord. C'était bien le point que je voulais faire.

    et d'autre parce que ça n'a pas de sens d'avoir des trucs si bas niveau, on préfère des outils plus génériques.
    Le bas niveau sert, pour implémenter les trucs plus génériques justement. C'est une des choses qui j'aime en C++, c'est de pouvoir travailler à bas niveau quand j'en ai besoin, et à haut niveau quand ce n'est pas nécessaire.

    (pour tes trucs par contre on trouve relativement facilement les équivalents, std::copy et autres algorithmes remplacent memcpy et compagnie
    J'ai du mal à appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::copy(reinterpret_cast<unsigned char*>(&src), reinterpret_cast<unsigned char*>((&src)+1), reinterpret_cast<unsigned char*>(&dst));
    une alternative meilleure à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(&dst, &src, sizeof src);
    et je ne parle même par de memmove pour lequel je ne vois pas de remplacement standard.

    -- les conversions se font en C++ avec les flux --
    (Les FILE sont des flux aussi )

    As-tu déjà réellement essayé d'utiliser les flux pour remplacer strtod ou strtol en faisant de la gestion d'erreur? Et je ne parle pas de 36 comme troisième argument à strtol.

    et l'entrée sortie avec les flux aussi, donc fflush n'a pas d'intérêt)
    Comment fais-tu l'équivalent de fflush(NULL) avec les IOStreams?

  14. #14
    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
    Par défaut
    Je t'avoue que je sais même pas ce que fait fflush(NULL). Normalement ça prend un FILE*.
    Après bon, normalement, les iostream ne sont pas construits au dessus des FILE*, donc gérer la bufférisation des FILE* ça sert à rien.

  15. #15
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque
    Après bon, normalement, les iostream ne sont pas construits au dessus des FILE*, donc gérer la bufférisation des FILE* ça sert à rien.
    Vu le genre de programmes sur lesquels je travaille (quelques dizaines de millions de lignes écrites principalement en Fortran, C, C++), supposer qu'il n'y a pas de FILE* ouvert quand on fait de la gestion d'erreur est un peu audacieux.

  16. #16
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 304
    Par défaut Fonction lexicographique
    Merci pour toutes vos réponses; mais je crois pas que j'ai le niveau suffisant pour comprendre ce que vous dites. si qlq peut m'exprimer std::... par exemple je serais reconnaissante !

  17. #17
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Maria1505
    si qlq peut m'exprimer std::... par exemple je serais reconnaissante !
    Il y a un niveau en dessous duquel des explications sur un forum ne suffisent pas. Je crois qu'il te faut chercher un livre qui explique les choses en détails.

  18. #18
    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

Discussions similaires

  1. [Débutant] Fonction MATLAB 'strcmp'
    Par celtic29 dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 03/05/2012, 20h24
  2. Inumerer la fonction strcmp
    Par momeftah dans le forum C
    Réponses: 5
    Dernier message: 25/01/2007, 13h49
  3. strcmp fonction pointeur
    Par djibril dans le forum C
    Réponses: 7
    Dernier message: 24/01/2007, 20h07
  4. [VS 2005] autre fonction que strcmp?
    Par Cirdan Telemnar dans le forum Visual C++
    Réponses: 3
    Dernier message: 05/06/2006, 12h13
  5. Probleme sur fonction strcmp
    Par Invité dans le forum C
    Réponses: 8
    Dernier message: 10/01/2006, 00h02

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