c++formattingstringstream

Equivalent of %02d with std::stringstream?


I want to output an integer to a std::stringstream with the equivalent format of printf's %02d. Is there an easier way to achieve this than:

std::stringstream stream;
stream.setfill('0');
stream.setw(2);
stream << value;

Is it possible to stream some sort of format flags to the stringstream, something like (pseudocode):

stream << flags("%02d") << value;

Solution

  • You can use the standard manipulators from <iomanip> but there isn't a neat one that does both fill and width at once:

    stream << std::setfill('0') << std::setw(2) << value;
    

    It wouldn't be hard to write your own object that when inserted into the stream performed both functions:

    stream << myfillandw( '0', 2 ) << value;
    

    E.g.

    struct myfillandw
    {
        myfillandw( char f, int w )
            : fill(f), width(w) {}
    
        char fill;
        int width;
    };
    
    std::ostream& operator<<( std::ostream& o, const myfillandw& a )
    {
        o.fill( a.fill );
        o.width( a.width );
        return o;
    }