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 :

format string


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut format string
    bonjour je voudrais savoir comment
    stocker un entier <255 dans un string de taille 3
    et qu'il soit toujours aligné à droite
    merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Par défaut
    Bonjour,

    Voici un petit code (écrit à la "va vite") qui pourra peut être t'inspirer.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include<string>
    #include<iostream>
     
    std::string int2string( int ii)
    {
        char s[255];
        sprintf( s, "%i", ii);
        return s;
    }
     
    void main ()
    {
         int monInteger;
         std::cin >> monInteger;
     
         // ici j'ai un int : par exemple 45
     
         std::string monString1 = int2string(monInteger);
     
         // ici j'ai un string : "45"
     
         int taille = static_cast<int>(monString1.size());
     
         // ici, taille est égal à 2
     
         if (taille == 3)
         {
             finalString =  monString1;
         }
         if (taille < 3)
         {
             int pas = 3 - taille;
             std::string finalString("   "); // 3 caractères
             for (int zz=0; zz<taille;zz++)
             {
                  finalString[pas] = monString1[zz];
                  pas++;
             }
         }
    }
    Cordialement,
    A.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    je voulais justement eviter de faire des IF mon entier <10 <100 etc

    je crois en C# il y a un truc comme string s=String.Format({0,3:0},monentier); qui permet de faire ça
    comment en C++?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Par défaut
    Bonjour,

    Je ne crois pas que std::string offre nativement cette fonctionnalité.
    Par contre, tu peux exploiter le c_str() avec un printf :
    http://www.cplusplus.com/reference/c...cstdio/printf/

    Cordialement,
    A.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    La F.A.Q. t'indique comment écrire un nombre dans un string.
    Tu as quelques options de formatage dans la STL.
    Pour quelque chose de vraiment fin, tu as Boost.Format.

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    width sert à ça.

    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
    #include <string>
    #include <iostream>
    #include <sstream>
     
    using namespace std;
     
    string inttostr(const int i) 
    {
        stringstream ss;
        ss.width(3);
        ss << i;
        return ss.str();
    }
     
    int main(void)
    {
        for(int i = 0; i < 255; i +=32) {
            cout << inttostr( i ) << endl;
        }
        return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      0
     32
     64
     96
    128
    160
    192
    224

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par agamitsudo Voir le message
    Voici un petit code (écrit à la "va vite") qui pourra peut être t'inspirer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::string int2string( int ii)
    {
        char s[255];
        sprintf( s, "%i", ii);
        return s;
    }
    En C, sprintf permet d'aligner à droite facilement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::string int2string(int ii)
    {
        char s[255];
        sprintf( s, "%3d", ii);
        return s;
    }

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    ok merci Mabu
    normalement je vais utiliser le printf avec %3d

    mais dis moi comment on peut convertir un std::string en char *

    pour ta solution avec stringstream parceque c'est plutot un char* qu'il me faudrait en sortie

  9. #9
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Ou sinon:

    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
    void convertir(char *dest, size_t entier)
    {
        for (i = 2; i >= 0; i--)
        {
              dest[i] = '0' + (entier % 10);
              entier /= 10;
        }
    }
     
    int main()
    {
         char abc[10] = {0};
         convertir(abc, 37);
     
         return 0;
    }
    Sinon pour if faut utiliser mastring.c_str() pour faire ta conversion.

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/07/2007, 11h03
  2. JTable, créer un comparateur de Dates au format String
    Par Nyphel dans le forum Composants
    Réponses: 7
    Dernier message: 13/02/2007, 16h15
  3. [Oracle] traitement des dates au format string
    Par shaftJackson dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/01/2007, 18h25
  4. Appel de constantes en format String
    Par Shiftane dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2006, 14h50
  5. Réponses: 11
    Dernier message: 08/10/2004, 15h12

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