2008-11-09 15 views
26

Ich bin mir ziemlich sicher, dass dies eine einfache Frage ist in Bezug auf die Formatierung, aber hier ist es, was ich erreichen will:cout Formatierung

I zur Ausgabe von Daten auf den Bildschirm mit cout wollen. Ich möchte dies in Form eines Tabellenformats ausgeben. Was ich damit meine, sind die Spalten und Zeilen sollten richtig ausgerichtet sein. Beispiel:

Test     1 
Test2    2 
Iamlongverylongblah 2 
Etc     1 

Ich bin nur mit der individuellen Leitung so meine Linie zur Ausgabe jetzt

cout (nicht in Betrieb) < < var1 < < "\ t \ t" < < var2 < < Endl ;

Was mich so etwas wie gibt:

Test     1 
Test2     2 
Iamlongverylongblah   2 
Etc     1 

Antwort

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

Was mich nicht geben, was ich will .. sind Sie sicher, das ist richtig? – BobS

+0

Sie haben vergessen, "<< links" hinzuzufügen. Dies ist erforderlich, wenn Sie linksbündige feste Felder möchten. –

+1

std :: left wird nicht bei jeder formatierten Ausgabe zurückgesetzt, sondern nur einmal. (Die Breite des Streams * ist * zurückgesetzt.) –

11

I Boost Format mit raten. Verwenden Sie etwas wie folgt:

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

Sie müssen die Länge der längsten Zeichenfolge in der ersten Spalte finden. Dann müssen Sie jede Zeichenfolge in der ersten Spalte in einem Feld mit der Länge der längsten Zeichenfolge ausgeben. Dies bedeutet notwendigerweise, dass Sie nichts schreiben können, bis Sie jede einzelne Zeichenfolge gelesen haben.

+0

Gibt es keinen einfacheren Weg? Setw oder etwas verwenden. – BobS

+1

> Gibt es keinen einfacheren Weg? Nicht, wenn Sie die Zukunft vorhersagen können. > Verwenden von Setw oder etwas. Ja, setw ist eine Möglichkeit, "jeden String in der ersten Spalte in einem Feld mit der Länge des längsten Strings auszugeben." –

+1

Die meisten formatierten Ausgaben, die ich gesehen habe, kümmern sich nicht darum, die maximale Größe eines Feldes zu finden, und wenn es einen vernünftigen Wert übersteigt, na ja, aber die Formatierung sieht ein bisschen komisch aus, wenn es das tut. –

-2

Sie können es mit

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