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 :

? Formater une string "à la printf" (ou CString.Format)


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut ? Formater une string "à la printf" (ou CString.Format)
    Bonjour,

    J'ai la mauvaise habitude d'utiliser le type microsoft CString au lieu des std::string . Notamment à cause de cette fonction: CString::Format qui est super pratique pour formater des chaînes à la mode printf().
    Mais voilà, aujourd'hui je dois apprendre à m'en passer et utiliser les string standard c++.

    je voudrais reprendre mon ancien code qui faisait très simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CString msg;
    msg.Format("blabla=%02iblabla%04X\r\n", 1 , i );
    pour obtenir par exemple : blabla=01blablaFFFF

    J'ai d'abord pensé (après avoir re-relu toute la FAQ c++ [edit: sur les strings seulement ^^ ]) à utiliser les streams avec quelque chose dans ce gout là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ostringstream oss;
    oss << "blabla" << i << blabla   // etc
    oss.str()
    Mon problème dans ce cas là est que je ne sait pas comment formater mon entier pour avoir 2 digits avec un zero, et encore moins comment obtenir une conversion hexa à 4 caractères.

    Autre idée, revenir au bon vieux sprintf...
    Mais que vais-je devenir le jour où je ne connaitrais pas la taille de la chaîne en sortie ? J'avoue que ça m'embete pas mal de revenir à des gestions manuelles de la taille des chaînes...

    Quelle est la meilleure solution ?
    Merci de votre aide.

  2. #2
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pour un formatage à la printf, voir boost.format.

    Sinon pour formater avec les flux, voir la FAQ :
    http://c.developpez.com/faq/cpp/?pag...stream_iomanip

  3. #3
    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
    Il faut utiliser les flags spéciaux, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << std::hex << nombreEnHexa <<

  4. #4
    Membre averti
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut merci
    Et ben comme quoi, c'était encore dans la FAQ...
    Bon ben moralité elle est vraiment bien cette FAQ (dommage que je sache pas chercher ^^ )


    Merci à vous.

  5. #5
    Membre averti
    Homme Profil pro
    PHP - HTML5 - CSS3 - Laravel/Symfony - C/C++ - python
    Inscrit en
    Juillet 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : PHP - HTML5 - CSS3 - Laravel/Symfony - C/C++ - python

    Informations forums :
    Inscription : Juillet 2012
    Messages : 65
    Par défaut sstream et iomanip std::setprecision
    pour formater des double en string, j'ai trouvée une solution simple dans l'article de farscape : http://farscape.developpez.com/Articles/Conversions/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <string>
    #include <sstream>
    #include <iomanip>
     
    double pi=3.141593;
    char car='B';
    ostringstream os;
     
    os << setprecision(3) << pi << car << '\n';
    cout << os.str(); // on renvoit ici sur cout mais tout l'intérêt d'os est de faire ce que l'on veut de la chaîne os.str()
    qui retourne

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Hello

    Boost.format est une catastrophe en terme de performances et de code bloat, je recommande chaudement cppformat.

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

Discussions similaires

  1. Formater une string
    Par djoao dans le forum Débuter
    Réponses: 2
    Dernier message: 04/11/2008, 16h09
  2. Formater une string sur un nombre de caractères fixes
    Par melleb dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 15/05/2008, 09h45
  3. Formater une string en tableau de byte
    Par lamoufle dans le forum C
    Réponses: 5
    Dernier message: 22/11/2006, 16h51
  4. [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