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


Sujet :

C++

Vue hybride

TuRn3r sprintf en C++ 03/08/2006, 10h14
Eusebe Tu peux faire ça : int... 03/08/2006, 10h25
Médinoc Je crains qu'il n'y ait... 03/08/2006, 10h27
TuRn3r Ok je vais aller voir du coté... 03/08/2006, 10h48
Médinoc .fill() et .width() n'ont pas... 03/08/2006, 10h59
Eusebe Tu as trois classes pour... 03/08/2006, 11h04
TuRn3r OK Merci bien à tout le monde... 03/08/2006, 11h10
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Par défaut sprintf en C++
    Bonjour,
    j'ai une question un peu stupide, mais quelle est la traduction en C++ de sprintf.
    Je m'explique avec ce petit exemple qui ne fait pas grand chose en fait mais qui explique + ou - ce que je voudrai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int i = 1;
    while (...)
    {
       sprintf(name,"image%03d.jpg",i);
       cout << name << endl;
       i++;
    }
    en sortie j'obtiens ainsi :
    image001.jpg
    image002.jpg
    ...
    image010.jpg
    image011.jpg
    ...

    Pour le traduire en C++, j'ai pensé à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int i=1;
        while(...)
        {
            stringstream name;
            name << "image";
            name.width(3);
            name.fill('0');
            name << i;
            name << ".jpg";
            cout << name.str() << endl;
            i++;
        }
    Ca fonctionne, mais n'y a-t'il pas une façon plus naturellle d'écrire cela en C++ ?

    D'avance merci

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i=1;
    while(...)
    {
        ostringstream name;
        name << "image" << setfill('0') << setw(3) << i << ".jpg";
        cout << name.str() << endl;
        i++;
    }
    Mais c'est pas tellement mieux que ce que tu as fait...

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Je crains qu'il n'y ait hélas, pas mieux.

    Mais si tu as boost, on m'a dit (je n'ai pas vérifié, je n'ai pas boost) que les nostalgiques du printf() comme nous pouvaient utiliser boost::format.

    PS: Les opérations ci-dessus nécessitent le header <iomanip> en plus de <iostream>.
    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.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Par défaut
    Ok je vais aller voir du coté de boost.

    PS: Les opérations ci-dessus nécessitent le header <iomanip> en plus de <iostream>.
    --> Bah, non je n'utilise pas <iomanip> et ca marche

    Mais une question me taraude :
    quelle est la différence entre un stringstream et un ostringstream ?

    Merci a vous 2 pour vos réponses

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    .fill() et .width() n'ont pas besoin de <iomanip>.

    << setfill('0') << setw(3) nécessite <iomanip> (peut-être inclus par <sstream>, mais je serais étonné que ce soit garanti par la norme...)
    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.

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par TuRn3r
    quelle est la différence entre un stringstream et un ostringstream ?
    Tu as trois classes pour manipuler les chaînes de caractères comme des flux :
    - istringstream ;
    - ostringstream ;
    - stringstream.

    Si je ne me plante pas, istringstream sert à récupérer les données d'une chaîne formatée, ostringstream sert à créer une chaîne formatée, et stringstream peut faire les deux.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Par défaut
    OK Merci bien à tout le monde de votre aide ainsi que pour avoir éclairé ma sombre lanterne.

    En effet, je pense que je vais me tourner vers le booost::format à l'avenir http://www.boost.org/libs/format/doc/format.html


  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        int i=1;
        while(...)
        {
            cout << "image" << << setw(3) << setfill('0') << i << ".jpg" << endl;
            i++;
        }
    Inutile de passer par un flux supplémentaire...

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

Discussions similaires

  1. Connaitre la taille du résultat de sprintf
    Par gege2061 dans le forum C
    Réponses: 6
    Dernier message: 09/01/2006, 14h56
  2. [Débutant(e)] equivalence de sprintf en JAVA
    Par GuillaumeCorbineau dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/09/2005, 19h18
  3. [débutant] equivalent à sprintf pour les std::string
    Par Biosox dans le forum SL & STL
    Réponses: 22
    Dernier message: 26/08/2005, 12h46
  4. pb sprintf
    Par peuf23 dans le forum Langage
    Réponses: 4
    Dernier message: 02/08/2005, 17h46
  5. sprintf : le point devient virgule ?!
    Par jula dans le forum C++
    Réponses: 4
    Dernier message: 17/09/2004, 12h50

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