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 :

Convertir en string pour retourner


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 84
    Points : 67
    Points
    67
    Par défaut Convertir en string pour retourner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string List::afficherLigne(Article *article){
     
    	string info = article->noArticle+" "+article->prixUnitaire+" "+article->qt+" "+article->codeF+"\n";
    		return info;
     
     
    }
    Salut, présentement le compilateur me dit que je ne peu pas incrémenter un pointeur dans un entier, mais ce que je veux c'est concatener l'information de divers type de mon objet Article pour l'écrire dans un fichier texte.

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Pourrais tu nous donner le type des membres de Articles suivants:
    • noArticle
    • prixUnitaire
    • qt et
    • codeF
    Selon toute vraisemblance, il s'agirait sans doute d'entiers ou de réels.

    Si tel est le cas, il faut passer par un flux de conversion std::stringstream (cf cette entrée de la FAQ, et les suivantes)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    Pourrais tu nous donner le type des membres de Articles suivants:
    • noArticle
    • prixUnitaire
    • qt et
    • codeF
    Selon toute vraisemblance, il s'agirait sans doute d'entiers ou de réels.

    Si tel est le cas, il faut passer par un flux de conversion std::stringstream (cf cette entrée de la FAQ, et les suivantes)
    Edit:

    J'ai suivi la FAQ rapidement, et j'ai réglé mon problème, mais franchement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    string List::afficherLigne(Article *article){
    	ostringstream oss;
    	oss << article->noArticle;
    	string info = oss.str();
    	oss << article->prixUnitaire;
    	info +=(" "+oss.str());
    	oss << article->qt;
    	info +=(" "+oss.str());
    	info +=(" "+article->codeF+"\n");
     
    		return info;
    C'est assez absurde le traitement nécéssaire.

    [int]noArticle
    [double]prixUnitaire
    [int]qt et
    [string]codeF


    Cela aurait fonctionner en java de façon implicite, je m'attendais à la même chose vis-à-vis c++, je vais regarder la FAQ, mais j'aimerais une façon optimal de regler mon problème, puisque je me vois faire cela assez souvent.

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    tu peux utiliser un sprintf sinon tout droit venu du C.
    Dans tous les cas tu ne pourras pas le faire à la Java

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Citation Envoyé par djmoumout Voir le message
    tu peux utiliser un sprintf sinon tout droit venu du C.
    Dans tous les cas tu ne pourras pas le faire à la Java
    Houuuu... C'est un très mauvais plan que de conseiller l'usage des fonctions issues du C, si les possibilités propres au C++ sont suffisantes.

    Si, éventuellement, il y a des problèmes de performances clairement mis en évidence par le profiling, il sera toujours temps d'y penser, mais, en attendant, les *stringstream seront bien plus sécurisants à l'usage

  6. #6
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    C'est vrai que la librairie IOStream n'est clairement pas la partie plus agréable du C++.
    Ceci-dit, Yakuzan, tu noircis un peu le tableau avec ce code :

    Citation Envoyé par Yakuzan Voir le message
    J'ai suivi la FAQ rapidement, et j'ai réglé mon problème, mais franchement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    string List::afficherLigne(Article *article){
    	ostringstream oss;
    	oss << article->noArticle;
    	string info = oss.str();
    	oss << article->prixUnitaire;
    	info +=(" "+oss.str());
    	oss << article->qt;
    	info +=(" "+oss.str());
    	info +=(" "+article->codeF+"\n");
     
    		return info;
    C'est assez absurde le traitement nécéssaire.
    On peut faire un peu plus court:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    std::string afficherLigne(Article* article)
    {
      std::ostringstream oss;
      oss << article->noArticle << " " << article->prixUnitaire << " " << article->qt << " " << article->codeF << "\n";
      return oss.str();
    }
    Et comme d'hab en C++, on peut se construire toute sorte d'abstraction assez folle, si l'on est joueur (code piqué sur stack overflow ) :
    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
    20
    21
    22
     
    class make_string
    {
    public:
       template <typename T>
       make_string& operator<<( T const & datum )
       {
          buffer_ << datum;
          return *this;
       }
       operator std::string () const
       {
          return buffer_.str();
       }
    private:
       std::ostringstream buffer_;
    };
     
    std::string afficherLigne(Article* article)
    {
       return make_string() << article->noArticle << " " << article->prixUnitaire << " " << article->qt << " " << article->codeF << "\n";
    }

  7. #7
    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 174
    Points
    1 174
    Par défaut
    oui tu peux tout refaire ou utiliser boost::lexical_cast

  8. #8
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Je me sens l'âme d'un docteur Frankestein ce matin.
    Pour le fun, voici une macro horrible qui permet d'émuler le comportement du Java :
    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
    20
    21
    22
    23
    24
    25
     
    class make_string
    {
    public:
       template <typename T>
       make_string& operator+( T const & datum )
       {
          buffer_ << datum;
          return *this;
       }
     
       operator std::string () const
       {
          return buffer_.str();
       }
    private:
       std::ostringstream buffer_;
    };
     
    #define JAVASTRING make_string() +
     
    std::string afficherLigne(Article* article)
    {
       return JAVASTRING article->noArticle+" "+article->prixUnitaire+" "+article->qt+" "+article->codeF+"\n";
    }
    Je décline toute responsabilité si ce code est utilisé en production.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Merci à tous, problème résolu

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

Discussions similaires

  1. Convertir un String en Class pour Intent
    Par anto2b dans le forum Android
    Réponses: 1
    Dernier message: 13/06/2012, 15h39
  2. difficultés pour convertir une string en date
    Par p1xl_01 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 07/06/2011, 17h18
  3. Réponses: 2
    Dernier message: 18/08/2008, 17h07
  4. [DOM] parser une String pour en faire un document XML
    Par Fladnag dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 29/03/2004, 11h04
  5. [Debutant]Formater un string pour une url
    Par maxxou dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/03/2004, 16h17

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