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 :

Conversion de String vers int


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut Conversion de String vers int
    Bonjour,

    J'ai besoin de convertir en int un nombre lu dans un fichier texte, et contenu dans une string, pour faire des op�rations dessus.
    Je suis sous Visual studio 2005, et c'est un projet MFC

    J'ai utilis� la m�thode suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    int IDentier;
    IDentier=atoi(IDchaine.c_str());
    Probl�me : j'ai toujours 0 dans IDentier.

    Je pensais que c'�tait peut �tre un probl�me d'unicode, j'ai donc essay� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    int IDentier;
    IDentier=_wtoi(IDchaine.c_str());
    Cette fois, une erreur se produit � la complation :
    1>error C2664: '_wtoi' : impossible de convertir le param�tre 1 de 'const char *' en 'const wchar_t *'
    Quelqu'un a une solution?

    Merci d'avance

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    48
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par d�faut
    Salut

    teste ceci et dit moi si �a marche

    j'ai test� avec Code::Blocks est il n'y a pas de probl�me

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <iostream>
    #include <sstream>
     
    using namespace std;
     
    int main()
    {
        int nombre;
        string st="123";
     
        istringstream iss( st );
        // convertir en un int
     
        iss >> nombre;
     
        cout << "Hello world!  :"<< nombre << endl;
     
        return 0;
    }

  3. #3
    Membre �prouv�
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Par d�faut Une autre solution "string to int"


    Une autre solution "string to int" :

    int StringToInt(std::string in)
    {
    return atoi(in.c_str());
    }

    A+,
    Agamitsudo.

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    Citation Envoy� par getdz Voir le message
    Salut

    teste ceci et dit moi si �a marche

    j'ai test� avec Code::Blocks est il n'y a pas de probl�me

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <iostream>
    #include <sstream>
     
    using namespace std;
     
    int main()
    {
        int nombre;
        string st="123";
     
        istringstream iss( st );
        // convertir en un int
     
        iss >> nombre;
     
        cout << "Hello world!  :"<< nombre << endl;
     
        return 0;
    }
    Je viens de tester, et �a me met :
    1>error C2079: 'iss' utilise une class de 'std::basic_istringstream<_Elem,_Traits,_Alloc>' non d�fini

    1>error C2440: 'initialisation' : impossible de convertir de 'std::string' en 'int'
    (pour la ligne istringstream iss( st )

    J'ai aussi un warning, mais je pense qu'il est li� � cette erreur :

    1>warning C4552: '>>' : op�rateur sans effet ; op�rateur avec effet secondaire attendu

    int StringToInt(std::string in)
    {
    return atoi(in.c_str());
    }
    C'est pareil que ce que j'ai, non? (� part que tu le met dans une fonction, et que je le fais directement, ...)

    Je test quand m�me mais je suis pas convaincu.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    C'est pareil que ce que j'ai, non? (� part que tu le met dans une fonction, et que je le fais directement, ...)

    Je test quand m�me mais je suis pas convaincu.
    Je confirme, �a donne le m�me r�sultat : j'ai toujours 0 dans mon int.

    Si j'utilise _Wtoi, j'ai la m�me erreur que pr�c�demment.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    En fait, je n'ai plus d'erreur de compilation maintenant. J'avais juste oubli� de mettre #include <sstream>. D�sol�.

    Par contre, au lieu d'avoir un 0 � chaque fois comme avec la m�thode pr�cedente, j'ai -858993460.
    Si je met en unsigned int, j'ai 3435973836.

    J'ai bien v�rifi� en mode d�buggueur, la string contient bien mon chiffre, sans �space ou autre caract�re.

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    48
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par d�faut
    Citation Envoy� par CyberSlan Voir le message
    En fait, je n'ai plus d'erreur de compilation maintenant. J'avais juste oubli� de mettre #include <sstream>. D�sol�.

    Par contre, au lieu d'avoir un 0 � chaque fois comme avec la m�thode pr�cedente, j'ai -858993460.
    Si je met en unsigned int, j'ai 3435973836.

    J'ai bien v�rifi� en mode d�buggueur, la string contient bien mon chiffre, sans �space ou autre caract�re.
    Salut

    j'ai pas compris ce que tu veux dire.

    Est que avec ma m�thode, �a a march�?

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    D�sol�, j'ai pas �t� tr�s clair,

    C'est avec ta m�thode que j'ai r�ussi � faire tourner le programme sans erreur de compilation (j'avais une erreur dans un premier temps car je n'avais pas mis : #include <sstream> )

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <iostream>
    #include <sstream>
     
    using namespace std;
     
    int main()
    {
        int nombre;
        string st="123";
     
        istringstream iss( st );
        // convertir en un int
     
        iss >> nombre;
     
        cout << "Hello world!  :"<< nombre << endl;
     
        return 0;
    }
    Le probl�me c'est que quel que soit la valeur de st, j'obtiens -858993460 dans nombre, si nombre est de type int, et 3435973836 si nombre est de type unsigned int.

    En clair, j'ai cr�� la classe suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    int CClasses::StringToInt(std::string in)
    {
    	int out;
    	istringstream iss( in );
    	iss>>out;
    	return out;
    }
    et la valeur retourn�e est toujours -858993460

  9. #9
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    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 295
    Billets dans le blog
    2
    Par d�faut


    Chez moi �a fonctionne tr�s bien. Dans ma lib perso j'ai d'ailleurs la fonction suivante que j'utilise tr�s souvent et qui fait la m�me chose que le code propos�:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /**
    *       convert a std::string into any type
    *       @param   str      string to convert
    *       @param   dest     value built from the input string
    *       @return  true if convertion succeeded, false if failed
    */
    template<typename T>
    bool FromString( const std::string & str, T & dest )
    {
       std::istringstream iss( str );
       return ( iss >> dest != 0 );
    }
    Quel compilateur/IDE utilises-tu?

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    J'utilise Visual studio 2005, en MFC, et le projet utilise les caract�res unicode

  11. #11
    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
    Je ne vois pas comment �a peut causer ce genre de probl�me, m�me en unicode...
    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.

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    Est ce qu'il y a d'autres param�tres importants du projet qui pourraient �tre en cause?

    ou une autre fonction permettant de g�rer la conversion string->int?

    Au cas o�, voil� les libraires incluses au fichier qui contient ma classe (dans le fichier cpp):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "stdafx.h"
    #include "CryptageCle.h"
    #include "AccueilDlg.h"
    #include "Classes.h"
     
    #include <fstream>
    #include <iostream>
    #include <sstream>
     
    using namespace std;
    Dans le fichier .h :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    #include <sstream>
    class CClasses
    {
    public:
    	int CClasses::StringToInt(std::string in);	//Converti de string vers int
    };
    Et celles du fichier qui y fait appel :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "stdafx.h"
    #include "CryptageCle.h"
    #include "GererSerrures.h"
    #include "Classes.h"
     
    #include <fstream>
    #include <iostream>
    #include <sstream>
     
    using namespace std;
    Merci quand m�me pour tous vos messages pr�c�dents, m�me si pour le moment, le probl�me n'est pas r�solu

  13. #13
    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
    -858993460, c'est 0xCCCCCCCC, (la valeur des variables locales non-initialis�es quand on compile en Debug).
    3435973836, c'est pareil en non-sign�.
    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.

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    Effectivement, si j'initialise out � une certaine valeur, j'obtiens cette valeur en sortie. Ma fonction ne fait donc rien du tout

    Je ne vois vraiment pas ce qui bloque...

    En mode Release, j'ai 2084894365 (0x7C44F69D), je suppose que c'est la valeur des variable non-initialis�es pour ce mode.


    Sinon, j'ai essay� de copier mon projet sur un autre ordinateur avec visual studio 2005, et il y a le m�me probl�me. Ce n'est donc pas un probl�me li� � mon installation, mais au projet lui m�me.

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

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    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 295
    Billets dans le blog
    2
    Par d�faut
    Il n'y aurait pas des probl�me de compatilit� entre la MFC et la lib standard?
    Je demande �a car je vois que tu utillises l'en-t�te stdafx.h, il y a donc de fortes chances pour que tu utilises la MFC.

  16. #16
    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
    En fait, on dirait que c'est l'op�rateur >> qui ne fait rien...
    Que donnent les bits d'�tats (good, bad, etc) du stream apr�s l'utilisation du >> ?
    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.

  17. #17
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    Depuis le d�but, je fais mes tests avec les strings lus dans mon fichier. Je viens de tester avec une string d�finie directement dans le code, et �a marche.

    Le probl�me viens donc de ma lecture dans le fichier.

    Je n'avais pas test� �a avant, car quand je regarde mes variable en mode debug, elles contiennent bien les bonnes valeurs, et je ne pensasi pas que �a changerait quelque chose.

    voil� mon code de lecture dans le fichier :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    char fichierSignet[12]="random.lock";
    	std::ifstream fichier(fichierSignet, std::ios::in);
    	if (fichier)
    	{
    		while (!fichier.eof())
    		{
    			string IDrandomrec, RANDOMrec;
    			fichier >> IDrandomrec >> RANDOMrec;
    		}
    		fichier.close();
    	}
    	else
    	{
    		MessageBox(_T("Erreur d'ouverture du fichier random.lock"));
    	}
    J'utilise ensuite la fonction disponible plus haut pour convertir les valeurs de IDrandomrec et RANDOMrec, ce qui pose probl�me.

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    Citation Envoy� par r0d Voir le message
    Il n'y aurait pas des probl�me de compatilit� entre la MFC et la lib standard?
    Je demande �a car je vois que tu utillises l'en-t�te stdafx.h, il y a donc de fortes chances pour que tu utilises la MFC.
    En fait, on dirait que c'est l'op�rateur >> qui ne fait rien...
    Que donnent les bits d'�tats (good, bad, etc) du stream apr�s l'utilisation du >> ?
    D�sol�, j'�tais en train de taper mon message. Le probl�me ne vient pas de ma fonction de conversion, mais de la lecture dans le fichier, comme vous avez pu le lire.

  19. #19
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par d�faut
    C'est bon, j'ai trouv� le probl�me :
    Les valeurs de IDrandomrec et RANDOMrec �taient r�initialis�e � chaque passage dans la boucle. Elles �taient donc r�initialis�es au moment ou je les convertissaient.
    Je les ai donc initialis�es avant la boucle, et �a marche.

    Merci pour votre aide, et d�sol� de vous avoir fait perdre du temps pour �a, alors que le probl�me venait d'ailleurs.

  20. #20
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    48
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par d�faut
    Salut

    Essai de cr�er un new projet tous simple et test le code.

    Regardes si �a marche.

    Remarque:

    L'utilisation MFC rend ton code non portable. Si tu d�veloppe en C++ je te conseille d'utiliser Code::Blocks ( opensource et multi-plaforme).

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. Conversion de donn�e string vers int
    Par reptooyep dans le forum Biblioth�ques
    R�ponses: 0
    Dernier message: 05/06/2013, 22h40
  2. Conversion String ver int
    Par mapar� dans le forum Langage
    R�ponses: 3
    Dernier message: 23/01/2010, 00h23
  3. Conversion String vers Int ?
    Par manworms2 dans le forum C++Builder
    R�ponses: 1
    Dernier message: 08/12/2008, 08h36
  4. conversion string vers int
    Par canary dans le forum D�buter avec Java
    R�ponses: 3
    Dernier message: 11/05/2008, 18h35
  5. conversion string vers int
    Par mathher dans le forum C++
    R�ponses: 4
    Dernier message: 14/04/2006, 17h52

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