c++ - sstream - stringstream s
Equivalente de% 02d con std:: stringstream? (4)
¿Es posible transmitir algún tipo de banderas de formato al
stringstream
?
Lamentablemente, la biblioteca estándar no admite pasar especificadores de formato como una cadena, pero puede hacerlo con la biblioteca fmt :
std::string result = fmt::format("{:02}", value); // Python syntax
o
std::string result = fmt::sprintf("%02d", value); // printf syntax
Ni siquiera necesita construir std::stringstream
. La función de format
devolverá una cadena directamente.
Descargo de responsabilidad : soy el autor de la biblioteca fmt .
Quiero enviar un número entero a std::stringstream
con el formato equivalente de %02d
de printf
. ¿Hay una manera más fácil de lograr esto que:
std::stringstream stream;
stream.setfill(''0'');
stream.setw(2);
stream << value;
¿Es posible transmitir algún tipo de banderas de formato a la stringstream
, algo así como (pseudocódigo):
stream << flags("%02d") << value;
No se puede hacer mucho mejor en C ++ estándar. Alternativamente, puede usar Boost.Format:
stream << boost::format("%|02|")%value;
Puede usar los manipuladores estándar de <iomanip>
pero no hay uno ordenado que tenga tanto fill
como width
a la vez:
stream << std::setfill(''0'') << std::setw(2) << value;
No sería difícil escribir su propio objeto que cuando se insertó en la secuencia realizó ambas funciones:
stream << myfillandw( ''0'', 2 ) << value;
P.ej
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;
}
Puedes usar
stream<<setfill(''0'')<<setw(2)<<value;