Alinear texto a la derecha

Iniciado por Sothu, 12 Diciembre 2015, 17:01 PM

0 Miembros y 1 Visitante están viendo este tema.

Sothu

Buenas!
Me encuentro con una sequencia de datos que deben ir siendo alineados a la derecha y creo que estoy usando mal el cout << setw( WIDTH ).
El codigo de esta parte es este:
while ( ! fin.eof() )
    {
        cout << codi << " " << nom << setw( WIDTH ) << numero << endl;
        fin >> nom >> codi >> numero;
    }

Dejo tambien una imagen de mi resultado y de como deberia ser, a ver si alguien puede hecharme un cable..
http://imageshack.com/a/img903/7683/C834En.png
Gracias!

Sothu

Lo que vi que falla es que el setw empieza a contar los espacios despues de la ultima palabra escrita, cuando lo que deseo que haga es contarlas desde el principio de la linea. Alguna idea?

fary

Te diré que, el código del programa esta bién, lo que pasa que no es lo mismo realizar una tabulación desde la posicion 5 que desde la 7, me explico:

Fila 1                        Fila 2
perro                  589456            
Elefante                   896454    

Perro (4 char ) + 18 Espacios = Inicio Segunda fila en la posicion 22
Elefante (8 char) + 18 Espacios = Inicios segunda fila posicion 26

Para desarrollar una solución con las filas perfectas tendrías que desarrollar una algoritmo que le restase los espacios cuando mas grande fuera el nombre del animal y te saldrían todas las filas cuadradas.

Los de los animales a sido un ejemplo, espero que lo hallas logrado entender.

saludos!
Un byte a la izquierda.

Sothu

Y no hay alguna manera de que cuente a partir del principio? Es decir, que ignore lo que tenga escrito a la izquierda de manera que todas las filas queden alineadas.

fary

Te he respondido arriba como hacerlo  :rolleyes:

Partiremos de la base de que los primeros 20 caracteres son para la primera fila
y desde el caracter 21 hasta X sera para la segunda fila, entonces:


(20 - strlen(perro)) = 15, imprimimos perro, 15 espacios y a continuación la segunda columna.

(20 - strlen(elefante)) = 12, imprimimos elefante, 12 espacios y a continuacion la segunda columna, y quedaría así:

Fila1                fila2
perro                589456
elefante            896454

Espero lo hallas entendido ahora.
Un byte a la izquierda.