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 :

sprintf avec des std::string


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2005
    Messages
    40
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Vaucluse (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 40
    Par d�faut sprintf avec des std::string
    Bonjour,

    Je reprend actuellement un projet utilisant des CString, par souci de propret�, j'ai besoin de les remplacer par des std::string.
    La classe CString permet de faire un format, du meme style que sprintf (fonction .format).

    J'aimerai savoir si il existe un moyen propre de formatter une std::string � la sauce sprintf.

    stringA = "string de test n�%s a �t� lu"
    stringB = "18"

    "string de test n�18 a �t� lu"

    Merci de m'avoir lu

  2. #2
    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
    Citation Envoy� par Bart_lx Voir le message
    Bonjour,

    Je reprend actuellement un projet utilisant des CString, par souci de propret�, j'ai besoin de les remplacer par des std::string.
    La classe CString permet de faire un format, du meme style que sprintf (fonction .format).

    J'aimerai savoir si il existe un moyen propre de formatter une std::string � la sauce sprintf.

    stringA = "string de test n�%s a �t� lu"
    stringB = "18"

    "string de test n�18 a �t� lu"

    Merci de m'avoir lu
    Salut,

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    sprintf(stringA.c_str(), stringB.c_str());

  3. #3
    Membre averti
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2005
    Messages
    40
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Vaucluse (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 40
    Par d�faut
    La fonction .c_str() renvoie un const char * qui par d�finition n'est pas modifiable.

  4. #4
    Membre confirm�
    Avatar de Nykoo
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    234
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 234
    Par d�faut
    Citation Envoy� par Bart_lx Voir le message
    La fonction .c_str() renvoie un const char * qui par d�finition n'est pas modifiable.
    Tu peux passer par une chaine interm�diaire?

  5. #5
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  6. #6
    Membre averti
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2005
    Messages
    40
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Vaucluse (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 40
    Par d�faut
    La solution de passer par une chaine intermediaire me parait utilisable.
    --------
    char cTmp[256];
    sprintf(cTmp,mSiritCmd.mcsConnectionId.c_str(),mcsConnectionId);
    sCmd = cTmp;
    --------

    J'ai juste parcouru la librairie boost, mais je tiens a garder le code aussi clair et simple que possible.
    Merci pour vos r�ponses.

  7. #7
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par d�faut
    Citation Envoy� par coyotte507 Voir le message
    Salut,

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    sprintf(stringA.c_str(), stringB.c_str());
    Oulala, mon dieu mais quelle horreur.
    Non seulement on d�conseille � longueur de journ�e d'utiliser ces salet�s de fonctions en C++, mais m�me en C �a n'a rien de correct. Si au moins c'�tait un appel � snprintf et �crit normalement...
    Quand � boost::format, �a ne se justifie pas ici puisque les flux de la stl suffisent amplement pour une utilisation aussi simple. Utilise std::stringstream et va jeter un coup d'oeil aux manipulateurs qui sont d�cris dans la faq: http://cpp.developpez.com/faq/cpp/?p...stream_iomanip .

  8. #8
    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
    oui d�sol�, j'ai cru que sprintf et printf �taient pareils.

  9. #9
    Membre averti
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2005
    Messages
    40
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Vaucluse (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 40
    Par d�faut
    Zais_ethael,

    Je n'arrive pas a voir comment formater ma chaine avec un stringstream comme je le ferai avec le sprintf. (j'ai consulter la faq mais je ne vois pas).
    Merci en tout cas pour ta r�ponse

  10. #10
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par d�faut
    La syntaxe n'a rien � voir mais tu peux faire exactement la m�me chose, pour ton exemple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    stringstream ss;
    ss << "string de test n°" << stringB << " a été lu";
    Et si besoin, tu utilises les manipulateurs pour formater l'affichage des nombres par exemple.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 29/09/2010, 00h15
  2. Les nombres dans des std::string
    Par camboui dans le forum SL & STL
    R�ponses: 41
    Dernier message: 11/02/2009, 17h55
  3. R�ponses: 14
    Dernier message: 30/06/2008, 18h53
  4. R�ponses: 7
    Dernier message: 01/09/2006, 14h19
  5. R�ponses: 22
    Dernier message: 26/08/2005, 12h46

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