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

MFC Discussion :

Comment vérifier qu'une CString est un nombre?


Sujet :

MFC

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut Comment vérifier qu'une CString est un nombre?
    Bonjour,

    j'aimerais savoir comment était-il possible de déterminer si une CString est un nombre ou non?

    quand on utilise la méthode atoi(maChaine), il semble que ça passe même si maChaine n'est pas un nombre...

    existe-t-il une méthode permettant de faire ce test?...

    Merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Je dirais que si taChaine.SpanExcluding(_T("0123456789")).GetLength()>0 cela contient au mieux plus qu'un nombre.

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    tu peux aussi utiliser strtol qui t'indiquera la chaine qui ne contient pas de nombre.
    voir faq: http://cpp.developpez.com/faq/vc/ind...ConvertCString

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Houlà,
    la définition de SpanExcluding est assez complexe :
    Return Value
    A substring that contains characters in the string that are not in lpszCharSet, beginning with the first character in the string and ending with the first character found in the string that is also in lpszCharSet (that is, starting with the first character in the string and up to but excluding the first character in the string that is found lpszCharSet). It returns the entire string if no character in lpszCharSet is found in the string.
    est-ce que ça marche quand même si maChaine commence par un des caractères à exclure??...

    merci


    farscape,
    je ne pense pas que ce que tu me proposes me convienne...
    je ne cherche pas à extraire la chaine qui ne contient pas de chiffre

    je veux juste savoir si ma chaine contient uniquement des chiffres ou non

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    ça n'extrait pas de chaine , si il y a une erreur de conversion la chaine est d'erreur est <> NULL lit bien le post de la fac et la doc ...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    oui,
    en effet...

    mais je pense que la méthode de 3DArchi conviendrait mieux

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Tu as raison, si ta chaîne commence par un chiffre, ça ne va pas aller. On peut essayer à l'envers: SpanIncluding:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool b_est_chiffre = (str.SpanIncluding(_T("0123456789")).GetLength()==str.GetLength())&&(!str.IsEmpty());
    Non?

  8. #8
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    ou tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CString string(_T("01234"));  // par exemple
    LPCTSTR ptr=string;  // pointeur sur les caractères
    while (_istdigit(*ptr)) ++ptr;  // tant qu'il y a un chiffre, on avance le pointeur
    bool isnum=(*ptr==_T('\0'));  // si on a atteint la fin de chaine, alors c'est un nombre
    @+

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Tu as raison, si ta chaîne commence par un chiffre, ça ne va pas aller. On peut essayer à l'envers: SpanIncluding:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool b_est_chiffre = (str.SpanIncluding(_T("0123456789")).GetLength()==str.GetLength())&&(!str.IsEmpty());
    Non?
    Mais alors, dans ce cas,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(maChaine.Compare(maChaine.SpanIncluding(_T("0123456789")))==0)
    {
        // alors maChaine est bien un nombre
    }
    marcherait, non?

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par melleb Voir le message
    Mais alors, dans ce cas,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(maChaine.Compare(maChaine.SpanIncluding(_T("0123456789")))==0)
    {
        // alors maChaine est bien un nombre
    }
    marcherait, non?
    En lecture de code je dirais oui, mais maintenant tu peux aussi dérouler qqs tests pour vérifier

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    yeah!
    ça marche super!!

    merci pour votre aide

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 16/12/2007, 16h33
  2. Comment vérifier qu'une valeur est NULL ?
    Par innova dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2006, 14h53
  3. Comment vérifier qu'une date est nulle
    Par stressy dans le forum Access
    Réponses: 7
    Dernier message: 09/12/2005, 15h41

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