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 :

[debutant] string to int


Sujet :

C++

  1. #1
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut [debutant] string to int
    Je decide de corriger ma manie d'utiliser les char*, un peu honteux, j'ouvre la FAQ, nickel, je parse mon fichier, nickel, je convertit mes string en in.... c'est quoi ce bordel... faut passer par l'intermediaire d'un char* pour faire ca!!!

    http://c.developpez.com/faq/cpp/?pag...RINGS_strtonum

    Dites moi que je reve... ou mettez un genou a terre face a la toute puissance de la chaine de caractere.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    tu es sûr d'avoir bien lu la C++ ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992

  4. #4
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Bah voila ce que dit la FAQ C++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // créer un flux à partir de la chaîne à convertir
        std::istringstream iss( "10" );
        // convertir en un int
        int nombre;
        iss >> nombre; // nombre vaut 10
    Donc si je souhaite convertir mon string en int il me faut donc faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    string str = "10"
     
    // créer un flux à partir de la chaîne à convertir
        std::istringstream iss( str.c_str() );
        // convertir en un int
        int nombre;
        iss >> nombre; // nombre vaut 10
    Dites moi que j'ai loupé un truc et qu'il me suffit de faire une merde dans le genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int entier
    string str = "10";
    entier << str

  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
    Dites moi que j'ai loupé un truc et qu'il me suffit de faire une merde dans le genre
    Non, tu n'as rien loupé.

    Mais qu'est-ce qui te gêne avec le code donné dans la FAQ ? Où vois-tu un char* ?

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par harsh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string str = "10"
     
    // créer un flux à partir de la chaîne à convertir
        std::istringstream iss( str.c_str() );
        // convertir en un int
        int nombre;
        iss >> nombre; // nombre vaut 10


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string str = "10"
     
    // créer un flux à partir de la chaîne à convertir
        std::istringstream iss( str );
        // convertir en un int
        int nombre;
        iss >> nombre; // nombre vaut 10
    te donne une erreur de compilation !?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  7. #7
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Dans la creation du flux std::istringsrteam ("10") ... mais je vois plus loin effectivement que l'on peut y mettre un sting a la place...

    Je suis surpris par la lourdeur de la manipulation juste pour une conversion, je m'etonne de devoir faire moi meme une methode de 2 ligne qui prenne un string et me retourne un int

    EDIT: "10" est effectivement un string et non un char* d'ou ma confusion (peut etre serait il judicieux de nous prendre par la main en indiquant string str = "10"; dans la FAQ ), n'en reste pas moi que je trouve ca un peut lourd en comparaison au fonctions de conversion du C, des raisons?

  8. #8
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    pour information, il existe un constructeur de string qui permet de transformer automatiquement un char* en std::string pour éviter d'avoir à le faire à la main à chaque fois...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  9. #9
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    en l'occurence ca ne resoudrait pas mon "probleme" (qui est plus une discussion), j'ai un string et il n'existe apparement pas de moyen en une ligne de le convertir en int . Z'etes sur que l'operateur de redirection >> ne fait pas de converstion ?

  10. #10
    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
    En une seule ligne ? boost::lexical_cast : http://miles.developpez.com/tutoriel...ost/conversion

  11. #11
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    les opérateurs <<, >> appliqué à des entiers (avec un entier comme opérande gauche) sont des opérateurs de décalage de bits... non pas des opérateurs de redirection...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Dites, est-ce que ceci:
    Code C++ non-testé : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::string str("10");
    int nombre;
     
    std::istringstream(str) >> nombre;
    Marcherait, ou aurait-on une erreur de temporaire non-nommé non-constant?
    Je n'ai pas de compilateur "sans projet" sous la main, et je ne connais pas trop les standards à ce propos...
    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.

  13. #13
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    @Médinoc, Personnellement, après test, g++ (dernière version) ne dit rien du tout... ça passe nickel
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  14. #14
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par Swoög
    @Médinoc, Personnellement, après test, g++ (dernière version) ne rien du tout...
    Euh, j'ai pas compris ta réponse
    Mais chez moi, le code ci-dessous fonctionne (avec Code::Blocks et GCC).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <sstream>
     
    int main(void){
        std::string str("10");
        int nombre;
     
        std::istringstream(str) >> nombre;
     
        nombre += 15;
     
        std::cout << "nombre : " << nombre << std::endl;
    }

  15. #15
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string str = "10";
    int nombre = atoi(str.c_str());
    fonctionne.

    Et sinon, vive la MFC (pour une fois, j'en profite ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CString str = "10";
    int nombre = atoi(str);
    fonctionne également.

  16. #16
    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
    Et sinon, vive la MFC
    Ben... A ce niveau on peut utiliser n'importe quelle classe de chaîne, du moment qu'on en récupère un const char* à un moment ou un autre pour le refiler à atoi (beurk).

    Pour en revenir à istringstream, n'oubliez pas que ce n'est pas fait que pour la conversion "brute" string -> entier. On peut faire plein de choses avec un flux d'entrée, qu'on ne peut pas faire avec un atoi. Et puis si on veut vraiment avoir cette conversion en une ligne, ça ne coûte pas grand chose d'écrire un template qui en fait 3...

  17. #17
    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
    Citation Envoyé par r0d
    Et sinon, vive la MFC (pour une fois, j'en profite ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CString str = "10";
    int nombre = atoi(str);
    fonctionne également.
    Ça peut aussi se faire avec std::string si ça te fait plaisir...

Discussions similaires

  1. [Debutant] Manipuler les int dans un string
    Par mr_samurai dans le forum Débuter
    Réponses: 5
    Dernier message: 18/01/2008, 20h00
  2. [debutant] transtypage string en int
    Par melvar dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2006, 16h08
  3. [Debutant]Transformer string en int
    Par htaou dans le forum SL & STL
    Réponses: 7
    Dernier message: 09/09/2005, 21h28
  4. [Débutant][String] Remplacez les caractères speciaux
    Par paf15 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 27/04/2004, 22h39
  5. [Débutant][Math] float int arondi bizarre
    Par yolepro dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 27/04/2004, 10h01

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