Эквивалент %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.