Эквивалент %02d с std:: stringstream?
Я хочу вывести целое число в A std::stringstream
с эквивалентным форматом printf
' s %02d
. Есть ли более простой способ достичь этого, чем:
std::stringstream stream;
stream.setfill('0');
stream.setw(2);
stream << value;
можно ли передавать какие-то флаги формата в stringstream
, что-то вроде (псевдокод):
stream << flags("%02d") << value;
4 ответа:
вы можете использовать стандартные манипуляторы от
<iomanip>
но нет аккуратного, который делает обаfill
иwidth
на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; }
вы не можете сделать это намного лучше в стандартном C++. Кроме того, вы можете использовать импульс.Формат:
stream << boost::format("%|02|")%value;
можно ли передавать какие-то флаги формата в
stringstream
?к сожалению, стандартная библиотека не поддерживает передачу спецификаторов формата в строке, но вы можете сделать это с помощью библиотека fmt:
std::string result = fmt::format("{:02}", value); // Python syntax
или
std::string result = fmt::sprintf("%02d", value); // printf syntax
вам даже не нужно построить
std::stringstream
. Элементformat
функция возвращает строку напрямую.отказ от ответственности: Я автор библиотека fmt.