Partager via


Mise en forme des chaînes et E/S (Modern C++)

Les iostreams C++ sont capables de mettre en forme les E/S de chaîne. Par exemple, le code suivant indique comment définir cout pour mettre en forme un entier à sortir au format hexadécimal, en enregistrant d'abord l'état actuel et en le redéfinissant ensuite, car une fois que la mise en forme de l'état est passée à cout, l'ensemble du code reste ainsi jusqu'à modification.

#include <iostream>
#include <iomanip>
 
using namespace std;
 
int main() 
{
    ios state(nullptr);
 
    cout << "The answer in decimal is: " << 42 << endl;
 
    state.copyfmt(cout); // save current formatting
    cout << "In hex: 0x" // now load up a bunch of formatting modifiers
        << hex 
        << uppercase 
        << setw(8) 
        << setfill('0') 
        << 42            // the actual value we wanted to print out
        << endl;
    cout.copyfmt(state); // restore previous formatting
}

Cela peut être réellement trop fastidieux dans de nombreux cas. Vous pouvez aussi utiliser Boost.Format des bibliothèques Boost C++, même s'il n'est pas standard. Vous pouvez télécharger une bibliothèque Boost depuis le site Web Boost.

Voici certains avantages de Boost.Format :

  • Sécurisé : type sécurisé. Lève une exception pour les erreurs (par exemple, la spécification d'un trop petit nombre ou d'un trop grand nombre d'éléments).

  • Extensible : fonctionne pour tout type qui peut être transmis en continu.

  • Pratique : norme Posix standard et chaînes de format similaires.

Bien que Boost.Format soit généré en C++ iostreams, qui est sécurisé et extensible, il n'est pas optimisé pour les performances. Lorsque vous exigez une optimisation des performances, considérez en C printf et sprintf, qui sont rapides et faciles à utiliser. Toutefois, ils ne sont pas extensibles ou protégés contre les vulnérabilités. Les versions sécurisées existent, mais elles réduisent légèrement les performances. Pour plus d’informations, consultez printf_s, _printf_s_l, wprintf_s, _wprintf_s_l et sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l).

Le code suivant illustre quelques-unes des fonctionnalités de mise en forme de Boost.

    string s = str( format("%2% %2% %1%\n") % "world" % "hello" );
    // s contains "hello hello world"  
 
    for( auto i = 0; i < names.size(); ++i )
        cout << format("%1% %2% %|40t|%3%\n") % first[i] % last[i] % tel[i];
    // Georges Benjamin Clemenceau             +33 (0) 123 456 789
    // Jean de Lattre de Tassigny              +33 (0) 987 654 321

Voir aussi

Référence

<iostream>

<limits>

<iomanip>

Autres ressources

Bienvenue dans C++ (Modern C++)

Référence du langage C++

Référence de bibliothèque standard C++