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++

  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.

  11. #11
    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
    il n'y a pas besoin d'utiliser les stringstream.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main()
    {
    	string A = "18";
    	string B = "abc"+A+"def";
    	cout << B << endl;
     
            return 0;
    }

  12. #12
    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
    J'ai du mal m'expliquer car les r�ponses ne correspondent pas � la question.

    l'interet du sprintf reste le formatage de la chaine et le remplacement des clefs "%d pour un int, %s pour une chaine... etc.

    Le probleme n'est pas la concat�nation de 2 strings ou d'ajouter un string dans une autre non.
    Le probleme est que je recupere une chaine dans un fichier de config de la forme :
    string A("reader.register_event(%s,event.tag.report)");
    string B("18");

    Dans le d�roulement de mon code, je vais r�cuperer le port sur lequel doivent etre envoy� les infos, donc un int.
    L'interet est d'inserer la valeur du port dynamique dans la chaine dans le programme.

    /* Id�alement */
    Fonction : sprintf(A,B);

    J'ai besoin de faire un truc propre, et pas :
    /* Attention c'est moche */
    string B("18");
    string Out ("reader.register_event(");
    Out+= B;
    Out+= ",event.tag.report)";

  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
    Il me semble que boost.format est suppos� r�pondre � ce probl�me.
    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 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
    Ok pour boost alors.

    Merci pour vos r�ponses.

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