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 :

Déb info sur string


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 98
    Par défaut Déb info sur string
    Salut à tous,
    Je suis débutant, et je voudrais savoir comment interroger l'égalité de deux strings de manière insensible à la casse.
    Je fais sChaineInterrogée==sChaineModele
    Ca marche, mais c'est sensible à la casse.

    Merci à tous.

    Alain

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Par défaut
    Salut,

    avant de les comparer, tu mets tous les caractères de tes deux chaînes en majuscule. J'espère que c'est ce que tu voulais.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 98
    Par défaut
    Salut,
    Oui c'est ce que je veux faire.
    Dans la FAQ, il passe par des foncteurs. Et de plus, ça ne marche pas chez moi, je ne dois pas avoir le bon header pour transform.
    Je voudrais faire plus simple.
    Juste utiliser une boucle et toupper().
    Mais toupper prend un int comme argument.
    Comment puis-je transmettre chacuns des caractères de ma string à toupper() et les recuperrer pour en faire une nouvelle string.
    Comment convertir un caractère en int?
    Merci.
    Alain

  5. #5
    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
    La conversion de char en int est automatique (un char est un petit entier). Par contre la conversion inverse demande un petit static_cast, puisqu'il y a perte de taille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c = 'x';
    c = static_cast<char>(toupper(c));

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Euh, juste pour être sûr: toupper() est supposé accepter les valeurs négatives ou faut-il passer par un unsigned char, comme pour les fonctions isXXXX() de <ctype.h> ?
    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.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Euh, juste pour être sûr: toupper() est supposé accepter les valeurs négatives ou faut-il passer par un unsigned char, comme pour les fonctions isXXXX() de <ctype.h> ?
    Oui, toupper() à un comportement indéfini sur les valeurs négatives (crash le plus souvent). Il faut donc absolument convertir le char en unsigned char.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    t'as essayé simplement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <string>
    #include <algorithm>
     
    int main()
    {
       std::string str( "test" );
     
       std::transform( str.begin(), str.end(), str.begin(), toupper ); 
     
       std::cout << str << std::endl;
       return 0;
    }
    sinon dans boost, l'algo to_upper() qui prend juste un paramètre.

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Citation Envoyé par alainpeniche Voir le message
    Salut,
    Oui c'est ce que je veux faire.
    Dans la FAQ, il passe par des foncteurs. Et de plus, ça ne marche pas chez moi, je ne dois pas avoir le bon header pour transform.
    le header <algorithm> fait partie de la librairie standard, bizarre que tu ne l'aies pas Tu as quoi comme erreur ?

    Je voudrais faire plus simple.
    Juste utiliser une boucle et toupper().
    Mais toupper prend un int comme argument.
    Comment puis-je transmettre chacuns des caractères de ma string à toupper() et les recuperrer pour en faire une nouvelle string.
    Comment convertir un caractère en int?
    Merci.
    Alain
    C'est exactement ce que fait transform (sauf qu'il modifie directement la string, il n'en crée pas une nouvelle) ... Donc si tu ne peux pas l'utiliser, il te suffit de la réécrire : boucle sur l'iterateur de ton string et applique exactement ce qu'il y a dans la FAQ : cast vers uchar et fonction toupper.

    Sinon l'article "comment manipuler des chaînes indépendamment de la casse" donne une autre solution.

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

Discussions similaires

  1. Cherche lien info... sur l'analyse du code
    Par Alec6 dans le forum Qualimétrie
    Réponses: 3
    Dernier message: 03/03/2004, 14h44
  2. Récupérer des infos sur un AVI
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2003, 14h25
  3. Demande d'info sur treeview
    Par Anaxagore dans le forum IHM
    Réponses: 6
    Dernier message: 28/08/2003, 18h27
  4. [MFC]Info sur da la fusion sous Word
    Par kor dans le forum MFC
    Réponses: 6
    Dernier message: 22/08/2003, 11h14
  5. [CR] Infos sur l'utilisation de dll
    Par step dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 09/08/2002, 11h35

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