Pregunta

La primera cosa que viene a la mente es hacer un montón de \ t, pero eso haría que las palabras que se mal alineados Si cualquier palabra es más larga que cualquier otra palabra por unos pocos caracteres.

Por ejemplo, me gustaría tener algo como:

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName   T

En su lugar, incluyendo sólo los "\ t" 's en mi declaración cout sólo puedo manejar para obtener

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName                T

o

Name    Last Name            Middle initial
Bob     Jones    M
Joe     ReallyLongLastName   T

¿Qué más tengo que hacer?

EDIT: Así que tengo que primero que debería contar el ancho máximo de cada columna que desea visualizar, y luego añadir espacios de relleno en consecuencia. Pero, ¿cómo y con qué funciones, puedo ir haciendo esto? Debería simplemente contar el número de caracteres en una cadena y luego ir desde allí?

¿Fue útil?

Solución

std::setw de <iomanip>

por ejemplo.

using std::cout;
using std::setw;

cout << setw(10) << "This" <<
        setw(10) << "is" <<
        setw(10) << "a" <<
        setw(10) << "test" << '\n';

Salida:

      This        is         a      test

Otros consejos

También debe tener en cuenta que los diferentes editores / espectadores muestran texto con diferente tamaño de la pestaña. Por lo tanto el uso de pestañas, texto que parece que va muy bien organizado en un solo espectador puede mirar feo en otro.

Si realmente quiere producir arreglo agradable, se puede utilizar espacios de relleno, y se podía hacer dos pases en el texto: en primer lugar contar el ancho máximo de cada columna, a continuación, agregar la cantidad correcta de espacios de relleno a cada columna. Para este último, también se puede utilizar una llamada hecha a medida printf.

Actualización: Contando el ancho de la columna, básicamente, significa contar la longitud de las cadenas que tiene en columna dada. Se puede hacer uso de string::length() o strlen(), dependiendo de si se está utilizando std::string o char* ( el primero es recomendado). A continuación, sólo iterar a través de todas las palabras en esa columna, compara la longitud de palabra máximo que tiene hasta ahora, y si la palabra actual es más largo, se establece que la longitud a ser el nuevo máximo. Si almacena las palabras en un contenedor STL, puede incluso utilizar el std::max_element algoritmo hacer el trabajo para usted con una sola llamada de función.

Utilice el relleno printf() con el menos bandera para la alineación izquierda

 printf("%-8s%-21s%-7s%-6s\n", "Name", "Last Name", "Middle", "initial");
 printf("%-8s%-21s%-7s%-6s\n", "Bob", "Jones", "M", "");
 printf("%-8s%-21s%-7s%-6s\n", "Joe", "ReallyLongLastName", "T", "");

¿Qué produce:

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName   T

En situaciones como ésta típicamente se requieren dos pases: uno para descubrir la anchura máxima de cada columna y otro para hacer la impresión. Para iostreams estándar se puede utilizar la rutina width() tener la iostream manejar el relleno de forma automática.

formato Uso de cadena (de stdio) para visualizar cada línea.

http://www.cppreference.com/wiki/c/io/printf

Se va a dejar que se establece anchuras mínimas de campo y así se rellenará el resto de cada campo para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top