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

SL & STL C++ Discussion :

Conversion std::string vers numérique


Sujet :

SL & STL C++

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut Conversion std::string vers numérique
    Bonjour à tous,

    Comment puis-je détecter que la chaîne en entrée ne représente pas un integer?

    En effet, j'utilise la fonction "atoi()" mais celle-ci me renvoi 0 s'il y a une erreur.
    Mais ça peut ne pas être une erreur (si la chaîne est égale à "0")...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    atoi("0"); // renvoi 0 et c'est bon
    atoi("truc"); // renvoi 0 et c'est pas bon
    Comment puis-je faire?

    Bien evidemment je peux tester si c'est égal à "0" alors je renvoi 0, et sinon, si la méthode renvoi 0, c'est qu'il y a un soucis, mais je compte faire ça avec des float, des doubles etc...

    Merci beaucoup

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    boost::lexical_cast (http://www.boost.org/libs/conversion/lexical_cast.htm) lance une exception lorsque la conversion ne peut être réalisée et te permet de convertir dans les deux sens (chaine->objet et objet->chaine)

  4. #4
    Membre éprouvé
    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
    Points : 1 176
    Points
    1 176
    Par défaut
    et si tu peux, tu peux utiliser boost et les lexical_cast<>

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Alors j'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	std::istringstream iss( sString.c_str() );
    	iss >> iValue;
    Lorsque sString ne représente pas un integer, la valeur de iValue est inchangée.

    Ca m'embête d'utiliser boost juste pour ça sachant que c'est une classe de base qui sera utilisé très fréquemment... s'il faut télécharger boost pour le moindre projet utilisant cette classe... c'est pas tip top ><
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par mister3957
    Ca m'embête d'utiliser boost juste pour ça sachant que c'est une classe de base qui sera utilisé très fréquemment... s'il faut télécharger boost pour le moindre projet utilisant cette classe... c'est pas tip top ><
    SI vraiment tu manques de place, tu peux te contenter de récupérer juste les fichiers qui concernent lexical_cast, et les copier dans ton projet.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Bah je vais télécharger toute la librairie, de toute façon j'en aurai besoin pour autrechose mais bon... c'est domage qu'on ai besoin d'un élément externe pour gérer ce genre de situation ><. Au lieu de retourner 0, ils auraient pu balancer une exception...


    Merci beaucoup

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    Pas besoin de lancer une exception : l'état du stream est changé. Si l'extraction n'a pas pu avoir lieu, iss.fail() renverra true, et false sinon.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    ha super, j'essaye ça

    merci
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    C'est bon, ça marche nikel,

    merci beaucoup
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

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

Discussions similaires

  1. Conversion de String^vers CString
    Par alexadvance dans le forum Visual C++
    Réponses: 2
    Dernier message: 21/03/2007, 09h39
  2. [C++] conversion classe string vers float
    Par agrosjea dans le forum C++
    Réponses: 5
    Dernier message: 14/03/2007, 13h45
  3. Conversion std::string QString
    Par krokmitaine dans le forum Qt
    Réponses: 15
    Dernier message: 24/11/2006, 10h14
  4. conversion std::string en std::istringstream
    Par flipper203 dans le forum SL & STL
    Réponses: 3
    Dernier message: 06/07/2006, 18h34
  5. conversions std::string <---> CString
    Par Rupella dans le forum MFC
    Réponses: 5
    Dernier message: 21/02/2006, 15h11

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