str sstream print library biblioteca c++ formatting stringstream

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;