Эквивалентный из %02d со станд.:: stringstream?

Я хочу произвести целое число к a std::stringstream с эквивалентным форматом printf %02d. Есть ли более легкий способ достигнуть этого, чем:

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

Действительно ли возможно передать своего рода флаги формата потоком к stringstream, что-то как (псевдокод):

stream << flags("%02d") << value;
58
задан chema989 5 August 2016 в 22:21
поделиться

3 ответа

Вы можете использовать стандартные манипуляторы из , но нет такого удобного манипулятора, который одновременно заполняет и ширину :

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

Нетрудно написать собственный объект, который при вставке в поток выполнял обе функции:

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

Например,

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;
}
73
ответ дан 24 November 2019 в 18:58
поделиться

Вы не можете добиться большего в стандартном C ++. В качестве альтернативы вы можете использовать Boost.Format:

stream << boost::format("%|02|")%value;
9
ответ дан 24 November 2019 в 18:58
поделиться

Вы можете использовать

stream<<setfill('0')<<setw(2)<<value;
9
ответ дан 24 November 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: