2008-11-09 18 views
26

jestem całkiem pewny, że jest to proste pytanie w odniesieniu do formatowania, ale tutaj jest to, co chcę osiągnąć:cout Formatowanie

Chcę danych wyjściowych na ekranie przy użyciu cout. Chcę wyprowadzić to w formie formatu tabeli. Mam na myśli to, że kolumny i wiersze powinny być odpowiednio wyrównane. Przykład:

Test     1 
Test2    2 
Iamlongverylongblah 2 
Etc     1 

Obawiam się tylko z pojedynczej linii, więc moim linii do produkcji teraz (nie działa) jest

cout < < zm1 < < "\ t \ t" < < var2 < < endl ;

Który daje mi coś takiego:

Test     1 
Test2     2 
Iamlongverylongblah   2 
Etc     1 

Odpowiedz

44

setw.

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    cout << setw(21) << left << "Test" << 1 << endl; 
    cout << setw(21) << left << "Test2" << 2 << endl; 
    cout << setw(21) << left << "Iamlongverylongblah"  << 2 << endl; 
    cout << setw(21) << left << "Etc"  << 1 << endl; 
    return 0; 
} 
+0

nie daje mi to, co chcę .. jesteś pewien, że to jest prawidłowe? – BobS

+0

Zapomniałeś dodać "<< left". Jest to wymagane, jeśli chcesz ustawić stałe wyrównane do lewej strony. –

+1

std :: left nie jest resetowany na każdym sformatowanym wyjściu, potrzebujesz go tylko raz. (Szerokość strumienia * to * reset.) –

11

radzę korzystając Boost Format. Użyj czegoś takiego:

cout << format("%|1$30| %2%") % var1 % var2; 
2

Musisz znaleźć długość najdłuższego napisu w pierwszej kolumnie. Następnie musisz wypisać każdy ciąg w pierwszej kolumnie w polu o długości będącej najdłuższym ciągiem. To koniecznie oznacza, że ​​nie możesz nic napisać, dopóki nie przeczytasz każdego ciągu.

+0

Czy nie jest łatwiejszy sposób? Używając setw lub czegoś. – BobS

+1

> Czy nie ma prostszego sposobu? Nie, chyba że możesz przewidzieć przyszłość. > Używanie setw lub czegoś. Tak, setw jest jednym ze sposobów "wyprowadzenia każdego ciągu znaków w pierwszej kolumnie w polu o długości będącej najdłuższym ciągiem." –

+1

Najbardziej sformatowane wyjście, jakie widziałem, nie zadaje sobie trudu znalezienia maksymalnego rozmiaru pola i jeśli przekroczy ono przyzwoitą wartość, no cóż, ale formatowanie wygląda trochę dziwnie, kiedy to robi. –

-2

można zrobić z

string str = "somthing"; 
printf ("%10s",str); 
printf ("%10s\n",str); 
printf ("%10s",str); 
printf ("%10s\n",str);