2011-07-19 32 views

Odpowiedz

5

nie można zrobić coś bardzo podobnego do # przykład C:

String.Format("|{0,5}|{1,5}|{2,5}|{3,5}|", arg0, arg1, arg2, arg3); 

odczuwalna:

printf("|%5s|%5s|%5s|%5s|", arg0, arg1, arg2, arg3); 

Oto odniesienie użyłem, aby ten: http://www.cplusplus.com/reference/clibrary/cstdio/printf/

+2

Dla wyjścia tabelarycznej, printf C bije C++ przerażające I/O ręce w dół. –

+1

@DavidHammen Ale co jeśli format jest za mały? – Walter

+0

@Walter Jest to zdecydowanie problem - możesz po prostu wstawić, aby naprawić niedomiar, ale aby poradzić sobie z przepełnieniami, potrzebujesz logiki i zasad, aby "rozsądnie" owinąć. (Wycofaj się z przepełnienia do najbliższego ogranicznika, cofnij się do nierozgraniczonego zawijania w przypadku krawędzi i * następnie * martw się formatowaniem per-line.) Jest to stosunkowo prosty problem sam w sobie, ale prawdopodobnie więcej pracy niż jest to warte, robisz to dla estetycznego polerowania na niepowiązanym projekcie. –

7

Oto mała próbka tego, co iomanip posiada:

#include <iostream> 
#include <iomanip> 

int main(int argc, char** argv) { 
    std::cout << std::setw(20) << std::right << "Hi there!" << std::endl; 
    std::cout << std::setw(20) << std::right << "shorter" << std::endl; 
    return 0; 
} 

Istnieją inne rzeczy można zrobić, jak dobrze, jak ustawienie dokładności liczb zmiennoprzecinkowych , zmieniając znak używany jako dopełnienie, gdy używasz setw, wypisujesz liczby w coś innego niż podstawa 10 i tak dalej.

http://cplusplus.com/reference/iostream/manipulators/

0

Sprawdź długość kolumny, a także zachowaj długość o f pod uwagę, aby sformatować.

printf(" %-4s| %-10s| %-5s|\n", "ID", "NAME", "AGE"); 

Zobacz, jak zaprojektowano interfejs powłoki MySQL, da ci to dobry pomysł.

2

Nie mogłem znaleźć czegoś, co mi się podobało, więc je zrobiłem. Znajdź go w https://github.com/haarcuba/text-table

Oto exmaple jego wyjściu:

+------+------+----+ 
|  |Sex | Age| 
+------+------+----+ 
|Moses |male |4556| 
+------+------+----+ 
|Jesus |male |2016| 
+------+------+----+ 
|Debora|female|3001| 
+------+------+----+ 
|Bob |male | 25| 
+------+------+----+