Share via


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

Les classes, fonctions et opérateurs iostream> C++ <prennent en charge les E/S de chaîne mises en forme. Par exemple, le code suivant montre comment définir cout la mise en forme d’un entier en sortie en hexadécimal. Tout d’abord, il enregistre l’état actuel pour le réinitialiser par la suite, car une fois l’état de format passé, il reste de cette façon jusqu’à coutce qu’il soit modifié. Il ne s’applique pas simplement à la ligne de code unique.

#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
}

Cette approche est sécurisée et extensible de type, mais elle est également complexe et détaillée.

Options de format alternatives

En guise d’alternative, vous pouvez utiliser Boost.Format à partir des bibliothèques Boost C++, même s’il n’est pas standard. Vous pouvez télécharger n’importe quelle bibliothèque Boost à partir du site web Boost .

Voici quelques avantages :Boost.Format

  • Coffre : type sécurisé et lève une exception pour les erreurs, par exemple, la spécification de trop peu ou trop d’éléments.

  • Extensible : fonctionne pour n’importe quel type pouvant être diffusé en continu.

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

Bien qu’elles Boost.Format soient basées sur des installations iostream> C++<, qui sont sécurisées et extensibles, elles ne sont pas optimisées pour les performances. Lorsque vous avez besoin d’une optimisation des performances, envisagez C printf et sprintf, qui sont rapides et faciles à utiliser. Toutefois, elles ne sont pas extensibles ou sécurisées contre les vulnérabilités. (Coffre versions existent, mais elles entraînent une légère pénalité de performance. 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 certaines des fonctionnalités de mise en forme 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

Bienvenue dans C++
Informations de référence sur le langage C++
Bibliothèque C++ standard
<iostream>
<limits>
<iomanip>