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 :

Additionner 2 strings


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Par d�faut Additionner 2 strings
    Bonjour, j'ai 2 nombres ayant comme type std::string. Y a t-il un moyen de les additionner, par exemple en surchargeant l'operateur + ?
    merci.

  2. #2
    Membre confirm�
    Inscrit en
    Avril 2008
    Messages
    95
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par d�faut
    Salut,

    j'ai 2 nombres ayant comme type std::string
    Etrange comme formulation mais soit !
    Il est tout a fait possible de le faire. Je te laisse aller sur google et taper un truc du genre "C++ surcharge des operateurs" tu verras de suite comment ca fonctionne et quelles possibiltes cela t'offre.

    Bon courage

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Par d�faut
    J'ai dej� essayer de surcharger l'operateur + mais sans succes. J'ai regard� un peu sur le net, et pareil.
    un indice?



    Voil� ce que j'avais tent�...

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    int operator & +(std::string nb1, std::string nb2)
    {
      int res;
      res=nb1+nb2;
      return res;
    }
    Et �a serait encore mieux si �a pouvait me retourner le resultat sous forme de std::string.

    merci

  4. #4
    Membre confirm�
    Inscrit en
    Avril 2008
    Messages
    95
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par d�faut
    Voil� ce que j'avais tent�...


    Code :
    int operator & +(std::string nb1, std::string nb2)
    {
    int res;
    res=nb1+nb2;
    return res;
    }
    ???

    Outre les fautes de logique et de syntaxe, pourquoi surcharger cet operateur si c pour mettre a l'interieur :
    avec nb1 et nb2 string !!!

    Sinon dans la doc de la classe string du C++ (tout premier endroit ou il est tres utils de chercher en cas de pb) :

    http://www.cppreference.com/cppstrin...operators.html

    Tous les operateurs utiles dont + sont deja definis

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Par d�faut
    Ben je sais pas, moi �a me semblais logique ce que j'avais fait

    Mais, j'ai pas compris comment faire avec ce qui est dans la doc.
    Il y a bien �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    string operator+(const string& s1, const string& s2 );
    Mais je suppose que si je passe en parametre: 2 et 6 �a va me retourner 26, et non 8...

  6. #6
    Membre confirm�
    Inscrit en
    Avril 2008
    Messages
    95
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par d�faut
    Oula ...
    2 : int
    6 : int
    "2" : string, char*, ... ca depend
    si tu fais "2"+"6" ca doit probablement marcher
    A revoir les bases des types de donnees C++

  7. #7
    Membre �prouv�
    Inscrit en
    Avril 2008
    Messages
    155
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par d�faut
    hello,

    je vois pas trop ce que tu veux faire mais peut �tre que �a peut t'aider:

    http://www.cplusplus.com/reference/c...dlib/atoi.html

    atoi Convert string to integer (function)
    atol Convert string to long integer (function)
    atof Convert string to double (function)
    strtol Convert string to long integer (function)

  8. #8
    Membre �clair�
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de pr�cision�
    Inscrit en
    Avril 2008
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : En cours de pr�cision�

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par d�faut
    Salut � tous !

    Personnellement, je me pose la question de la pertinence de repr�senter des chiffres sous forme de cha�nes de caract�res. � mon avis, il faut revoir la conception.

    Sinon, au niveau des cha�nes de caract�res, l'op�rateur d'addition est surcharg� et effectue une concat�nation. Ainsi, le programme suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <string>
    #include <iostream>
     
    int main (int argc, char **argv) {
      const std::string chaine1 = "abc";
      const std::string chaine2 = "def";
      std::cout << chaine1 + chaine2 << std::endl;
      return 0;
    }  // main
    Retourne sur la sortie standard la chaine � abcdef. �

    Pour convertir une cha�ne de caract�res en entier, il existe deux m�thodes en C++. La premi�re vient du C, elle consiste � utiliser la fonction atoi de la biblioth�que standard C :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <string>
    #include <iostream>
    #include <cstd>
     
    int main (int argc, char **argv) {
      const std::string chaine = "12";
      const int entier = std::atoi(chaine) + 2;
      std::cout << entier << std::endl;
    }  // main
    Le code pr�c�dent retourne � 14 � sur la sortie standard.

    La deuxi�me m�thode consiste � utiliser un flux sur une cha�ne de caract�res :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <string>
    #include <iostream>
    #include <sstream>
     
    int main (int argc, char **argv) {
      std::string chaine = "12";
      std::istringstream ist (chaine);
      int entier;
      ist >> entier;
      std::cout << entier + 2 << std::endl;
    }  // main
    Ce code �galement affiche � 14 � sur la sortie standard.

    Pour surcharger l'op�rateur d'addition, tu peux faire �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <string>
    #include <cstd>
     
    // ...
     
    int operator + (const std::string &chaine1, const std::string &chaine2) {
      return std::atoi(chaine1) + std::atoi(chaine2);
    }  // int operator + (const std::string &, const std::string &)
    Mais je te d�conseille cette approche. � mon avis il faut revoir la fa�on dont tu stockes tes donn�es.

    � bient�t.

    Le Farfadet Spatial

  9. #9
    Membre exp�riment�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Par d�faut
    Citation Envoy� par Nyko17 Voir le message
    Bonjour, j'ai 2 nombres ayant comme type std::string. Y a t-il un moyen de les additionner, par exemple en surchargeant l'operateur + ?
    merci.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
     
    std::string operator+(std::string nb1, std::string nb2)
    {
    int res = convertir_en_int(nb1) + convertir_en_int(nb2);
    return convertir_en_string(res);
    }
    ...O� les fonction convertir_en_int et convertir_en_string restent � d�terminer...

    Cela dit, c'est curieux de red�finir cet op�rateur pour les std::string alors qu'il existe deja.

    Du coup tu ne pourras plus faire quelque chose du genre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    std::string a = "chaine alpha1";
    std::string b = "chaine alpha2";
     
    a + b;
    Edit : grill�

  10. #10
    Membre �clair�
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de pr�cision�
    Inscrit en
    Avril 2008
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : En cours de pr�cision�

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par d�faut
    Salut � tous !

    Citation Envoy� par Aurelpitiless Voir le message
    Cela dit, c'est curieux de red�finir cet op�rateur pour les std::string alors qu'il existe deja.
    Je suis bien d'accord.

    Du coup tu ne pourras plus faire quelque chose du genre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    std::string a = "chaine alpha1";
    std::string b = "chaine alpha2";
     
    a + b;
    Ceci, en revanche, n'est pas tout � fait exacte. Si jamais l'op�rateur d'addition est surcharg� de la fa�on que j'ai propos�e, alors ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    const std::string chaine1 = "12";
    const std::string chaine2 = "2";
    const std::string chaine3 = chaine1 + chaine2;
    const int entier = chaine1 + chaine2;
    std::cout << chaine3 << " = " << entier << std::endl;
    Affichera sur la sortie standard : � 122 = 14. �

    Par contre, le compilateur indiquera une ambigu�t� au moment de la compilation pour le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    const std::string chaine1 = "12";
    const std::string chaine2 = "2";
    std::cout << chaine1 + chaine2 << std::endl;
    � bient�t.

    Le Farfadet Spatial

  11. #11
    Membre exp�riment�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Par d�faut
    Citation Envoy� par Le Farfadet Spatial Voir le message

    Ceci, en revanche, n'est pas tout � fait exacte. Si jamais l'op�rateur d'addition est surcharg� de la fa�on que j'ai propos�e, alors ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    const std::string chaine1 = "12";
    const std::string chaine2 = "2";
    const std::string chaine3 = chaine1 + chaine2;
    const int entier = chaine1 + chaine2;
    std::cout << chaine3 << " = " << entier << std::endl;
    Affichera sur la sortie standard : � 14 = 14. �

    Par contre, le compilateur indiquera une ambigu�t� au moment de la compilation pour le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    const std::string chaine1 = "12";
    const std::string chaine2 = "2";
    std::cout << chaine1 + chaine2 << std::endl;
    Tout a fait . Ce que je voulais soulever, c'�tait que la s�mantique de l'op�rateur variait (voir m�me l'op�rateur n'�tait plus valide du tout) en fonction du retour attendu et du contenu des cha�nes...

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

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    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 299
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par Le Farfadet Spatial Voir le message
    Personnellement, je me pose la question de la pertinence de repr�senter des chiffres sous forme de cha�nes de caract�res. � mon avis, il faut revoir la conception.
    Sans doute qu'il r�cup�re les valeurs d'un flux externe. Un fichier par exemple.

    La meilleure solution consiste � proc�der en 2 �tapes:
    1/ on transforme la chaine de caract�res en int (et s'il vous plait, ar�tez avec atoi et autres joyeuset�s du C, nous sommes sur un forum c++). La solution est, une fois de plus, dans la faq: ici
    2/ additionner les deux entiers.

    Mais koala va vous expliquer tout �a en d�tail

    edit: quant � la surcharge de d'addition de string, elle est � proscrire d�finitivement pour plusieurs raisons, et notamment pour la simple et bonne raison que l'on ne pourra plus concat�ner des strings avec l'operateur +.

    edit2:
    Citation Envoy� par farfadet spatial
    Ceci, en revanche, n'est pas tout � fait exacte. Si jamais l'op�rateur d'addition est surcharg� de la fa�on que j'ai propos�e, alors ceci :
    As-tu test�? Non. Si l'operateur + est surcharg� comme tu le dis, string3 = string1 + string2 ne compilera pas.

  13. #13
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,
    Citation Envoy� par Nyko17 Voir le message
    Bonjour, j'ai 2 nombres ayant comme type std::string.
    Il faut commencer par convertir chaque chaine en entier.

    La classe stringstream est l� pour t'y aider
    Citation Envoy� par Nyko17 Voir le message
    Y a t-il un moyen de les additionner, par exemple en surchargeant l'operateur + ?
    Je ne crois vraiment pas que la surcharge de l'op�rateur + soit r�ellement conseill�e...

    L'id�al serait plut�t, selon moi, de cr�er une classe personnelle qui se chargera de la transformation "transparente" de la chaine de caract�res en entier, et utilisera directement la valeur convertie, avec �ventuellement les op�rateurs + et -
    Citation Envoy� par loicounet Voir le message
    hello,

    je vois pas trop ce que tu veux faire mais peut �tre que �a peut t'aider:

    http://www.cplusplus.com/reference/c...dlib/atoi.html

    atoi Convert string to integer (function)
    atol Convert string to long integer (function)
    atof Convert string to double (function)
    strtol Convert string to long integer (function)
    Horreur et calamit�...

    les fonctions ato* sont � �viter autant que possible, comme c'est le cas de toutes les fonctions issues directement du C.

    Le C++ est un langage qui fournit �norm�ment de possibilit�s plus s�curisantes � l'emploi que la grosse majorit� des fonctions h�rit�es du C, et il est donc fortement recommand� de leur pr�f�rer � chaque fois les possibilit�s C++.

    Dans le cas qui nous int�resse, les *stringstream sont pleinement qualifi�s pour effectuer le travail.

    Ainsi, un simple code du genre de
    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
    int additionne(const std::string& i1, const std::string& i2)
    {
        /* déclare un flux de conversion */
        std::stringstream ss;
        /* introduit les valeurs sous forme de chaines dans le flux de conversion */
        ss<<s1<<" "<<s2;
        int op1;
        int op2;
        if(!(ss>>op1>>op2)) 
        {
            /* ce qu'il faut faire si l'une des chaines n'est pas compatible avec
             * les nombres entiers
             */
        }
        /* renvoie l'addition des deux opérandes récupérés. */
        return op1+op2;
    }
    fera parfaitement l'affaire (requi�re un #include <sstream> avant la d�claration de "ss" )
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  14. #14
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Par d�faut
    Merci pour toutes vos r�ponses. Je vais essayer tout �a. Et pour r�pondre � certains qui se demandent pourquoi je dois faire �a, c'est que j'ai des variables qui prennent leur valeurs dans le contenu d'un fichier texte.

    ex:

    Le fichier texte:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    Nom: toto
    Année: 2001
    Quantité: 6
    Et dans mon code j'ai une variable std::string saQuantit� a laquelle j'affecte la quantit� (en string) lu dans le fichier texte.

    Mais par la suite je peux avoir besoin d'additionner deux quantit�s. Voil� pourquoi.

    Merci encore.

  15. #15
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    Bonjour,

    Personnellement je ne suis pas tout � fait d'accord avec le fait de ne pas utiliser atoi.

    Le comportement de la fonction atoi est d�crit ici, et l'on peut voir qu'il se comporte aussi surement qu'un stringstream.

    Et utiliser la fonction atoi est beaucoup plus l�ger que de cr�er une classe, d'allouer la chaine de caract�res de la classe dynamiquement, de copier tous les caract�res dans la stringstream, et d'utiliser un flux pour convertir en int.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    int additionne(const std::string& i1, const std::string& i2)
    {
        return atoi(i1.c_str())+atoi(i2.c_str());
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    int additionne(const std::string& i1, const std::string& i2)
    {
        std::stringstream ss;
        ss<<s1<<" "<<s2;
        int op1 = 0;
        int op2 = 0;
        return op1+op2;
    }
    Pour moi la premi�re fonction est pr�f�rable � tous points de vue. Les classes de la STL sont tr�s utiles, mais je ne vois aucune raison valable de ne pas utiliser certaines fonctions du C pur, quand c'est plus pratique, plus court, et plus performant.

  16. #16
    Membre �clair�
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de pr�cision�
    Inscrit en
    Avril 2008
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : En cours de pr�cision�

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par d�faut
    Salut � tous !

    Citation Envoy� par r0d Voir le message
    Sans doute qu'il r�cup�re les valeurs d'un flux externe. Un fichier par exemple.
    Oui, c'est bien pour �a que je pense et visiblement je ne suis pas le seul, qu'il ne vaut mieux pas enregistrer l'entier dans une cha�ne, mais utiliser un flux. Peut-�tre n'ai-je pas �t� assez clair.

    Citation Envoy� par r0d
    As-tu test�? Non. Si l'operateur + est surcharg� comme tu le dis, string3 = string1 + string2 ne compilera pas.
    Au temps pour moi : je viens de le tester avec gcc et �a ne fonctionne pas, en effet.

    Citation Envoy� par r0d
    s'il vous plait, ar�tez avec atoi et autres joyeuset�s du C, nous sommes sur un forum c++
    et

    Citation Envoy� par koala01
    Horreur et calamit�...

    les fonctions ato* sont � �viter autant que possible, comme c'est le cas de toutes les fonctions issues directement du C.
    Ah ! Ben fl�te, alors... Il va falloir que j'arr�te d'utiliser les fonctions de cmath, sous pr�texte que c'est du C... �a tombe mal, j'en ai besoin tous les jours.

    Je suis bien d'accord d'une part que trop souvent on trouve un m�lange de C et C++ imbuvable, g�n�ralement peu efficace et de toute fa�on difficile � lire et � maintenir. Et ceci est on ne peut plus vrai :

    Citation Envoy� par koala01
    Le C++ est un langage qui fournit �norm�ment de possibilit�s plus s�curisantes � l'emploi que la grosse majorit� des fonctions h�rit�es du C
    Et oui, nous sommes bien d'accord, lorsqu'on lit les donn�es dans un fichier, les flux sont une bien meilleure solution, car plus s�curis�s et permettant beaucoup plus de traitements de mani�re simple et �l�gante et que les fonctions de la biblioth�que standard C.

    Cela dit, la biblioth�que standard C a �t� encapsul�e pour �tre utilis�e proprement en C++ et parfois c'est une solution propre, efficace et �l�gante. Par exemple, lorsque dans ma ligne de commande, j'attends en deuxi�me argument un entier, il n'y a aucun probl�me pour �crire :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    int val = atoi(argv[2]);
    Plut�t que de faire un flux sur une cha�ne, qui demande tout de m�me un peu plus de travail, tout �a pour un unique entier...

    � bient�t.

    Le Farfadet Spatial

  17. #17
    Membre �clair�
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de pr�cision�
    Inscrit en
    Avril 2008
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : En cours de pr�cision�

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par d�faut
    Re-salut � tous !

    Citation Envoy� par Nyko17 Voir le message
    Et pour r�pondre � certains qui se demandent pourquoi je dois faire �a, c'est que j'ai des variables qui prennent leur valeurs dans le contenu d'un fichier texte.

    ex:

    Le fichier texte:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    Nom: toto
    Année: 2001
    Quantité: 6
    Et dans mon code j'ai une variable std::string saQuantit� a laquelle j'affecte la quantit� (en string) lu dans le fichier texte.

    Mais par la suite je peux avoir besoin d'additionner deux quantit�s.
    Donc, tu es typiquement dans le cas o� il est pr�f�rable d'utiliser un flux et de stocker la quantit� non pas sous forme de cha�ne de caract�res, mais d'entier.

    � bient�t.

    Le Farfadet Spatial

  18. #18
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par Le Farfadet Spatial Voir le message
    <snip>
    Ah ! Ben fl�te, alors... Il va falloir que j'arr�te d'utiliser les fonctions de cmath, sous pr�texte que c'est du C... �a tombe mal, j'en ai besoin tous les jours.

    Je suis bien d'accord d'une part que trop souvent on trouve un m�lange de C et C++ imbuvable, g�n�ralement peu efficace et de toute fa�on difficile � lire et � maintenir. Et ceci est on ne peut plus vrai :



    Et oui, nous sommes bien d'accord, lorsqu'on lit les donn�es dans un fichier, les flux sont une bien meilleure solution, car plus s�curis�s et permettant beaucoup plus de traitements de mani�re simple et �l�gante et que les fonctions de la biblioth�que standard C.
    Ce qu'il y a, c'est que la grosse majorit� des cas o� tu va avoir besoin de convertir un entier en une chaine et vice-versa (voire un objet en chaine), c'est dans un contexte de flux...

    Ce sera parce que tu voudra lire ou �crire dans un fichier, ou parce que tu voudra envoyer ou recevoir les donn�es au travers d'un syst�me quelconque de transmission, bas� sur la transmission de caract�res.

    D�s lors, il semble tout de suite logique de passer par des flux, et le flux de conversion stringstream (i ou o selon le cas) est un pr�tendant des plus logique
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  19. #19
    Membre �clair�
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de pr�cision�
    Inscrit en
    Avril 2008
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : En cours de pr�cision�

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par d�faut
    Salut � tous !

    Citation Envoy� par koala01 Voir le message
    Ce qu'il y a, c'est que la grosse majorit� des cas o� tu va avoir besoin de convertir un entier en une chaine et vice-versa (voire un objet en chaine), c'est dans un contexte de flux...
    Dans la majorit� des cas, oui, mais pas toujours... Sachons avoir un peu de souplesse (je dis �a pour moi aussi) ! D'autant que, comme le fait remarquer Coyotte504, les fonctions ato* ne sont pas moins s�curis�es que des flux, juste beaucoup moins versatiles.

    Cela dit, maintenant, nous savons que Nyko17 est en train de lire un fichier, donc, en effet, nous pouvons lui donner ce judicieux conseil : utilise des flux, sacrebleu !

    � bient�t.

    Le Farfadet Spatial

  20. #20
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    52
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Par d�faut
    J'ai encore un petit probl�me:

    Voici l'en-t�te de mon fichier:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    #include <sstream>
    #include <iostream>
    #include <list>
    #include <fstream>
    Voici la fonction concern�e:

    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
     
    std::string ListeVins::convertiEnIntetAjoute(std::string & Qt1, std::string & Qt2)
    {  
    	std::istringstream iss( Qt1 );   //ici
    	int laQt1;
    	iss >> laQt1;	
    	std::istringstream iss( Qt2 ); // et là
    	int laQt2;
    	iss >> laQt2;	
    	int res= laQt1 + laQt2;	
        std::ostringstream oss;  
        oss << res;
        std::string result = oss.str();
     
        return result;
    }
    Et les erreurs:

    ici: erreur: 'std::istringstream iss' previously declared here
    l�: erreur: redeclaration of 'std::istringstream iss'

Discussions similaires

  1. Additionner deux String qui sont des nombres
    Par JDev_ dans le forum Requ�tes et SQL.
    R�ponses: 1
    Dernier message: 24/05/2012, 13h00
  2. �liminer un caractere d'un string
    Par no-vice dans le forum Langage
    R�ponses: 5
    Dernier message: 09/08/2002, 14h55
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    R�ponses: 4
    Dernier message: 15/07/2002, 09h47
  4. R�ponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    R�ponses: 12
    Dernier message: 17/05/2002, 15h23

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