2009-02-25 18 views
12

¿Cómo formateo mi salida en flujos de C++ para imprimir tablas de ancho fijo alineado a la izquierda? Algo así comoDiseño de tabla usando std :: cout

printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345); 

poducing

12345.123  12345.123 

Respuesta

17

Incluir el encabezado estándar <iomanip> y se vuelven locos. Específicamente, el manipulador setw establece el ancho de salida. setfill establece el carácter de relleno.

+3

+1 para literalmente enloquecer. – Anonymous

+0

No olvide 'std :: left' para la alineación a la izquierda. –

+0

¿Hay alguna buena razón por la cual 'printf()' no sería una buena opción? –

15
std::cout << std::setiosflags(std::ios::fixed) 
      << std::setprecision(3) 
      << std::setw(18) 
      << std::left 
      << 12345.123; 
11

También puede considerar la funcionalidad más amigable proporcionada por uno de estos:

  • Boost.Format (poderosa, pero muy pesada, más tiempo y asignaciones de memoria que otras mencionadas)
  • Loki.SafeFormat
  • FastFormat (relativamente nuevo, pero ardiente biblioteca rápida, también de tipo seguro a diferencia de los otros)

escritura de la memoria, pero debe haber algo en este sentido:

// Dumb streams: 
printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345); 

// For IOStreams you've got example in the other answers 

// Boost Format supports various flavours of formatting, for example: 
std::cout << boost::format("%-14.3f%-14.3f\n") % a % b; 
std::cout << boost::format("%1$-14.3f%2$-14.3f\n") % a % b; 
// To gain somewhat on the performance you can store the formatters: 
const boost::format foo("%1$-14.3f%2$-14.3f\n"); 
std::cout << boost::format(foo) % a % b; 

// For the Loki::Printf it's also similar: 
Loki::Printf("%-14.3f%-14.3f\n")(a)(b); 

// And finally FastFormat.Format (don't know the syntax for decimal places) 
fastformat::fmtln(std::cout, "{0,14,,<}{1,14,,>}", a, b); 

Además, si va a pegarse con cualquiera de estas librerías de formato, examine minuciosamente sus limitaciones en contexto de expresividad, portabilidad (y otra dependencia de biblioteca), eficiencia, soporte de internacionalización, seguridad de tipo, etc.

+0

¿podría agregar enlaces? – jwfearn

+0

Enlaces ahora, ejemplos mañana por la tarde (hora GMT) – Anonymous