2008-11-09 61 views
26

我敢肯定這是關於格式化一個簡單的問題,但這裏是我想要完成的任務:COUT格式化

我要輸出數據到使用COUT屏幕。我想以表格格式輸出。我的意思是列和行應該正確對齊。例如:

Test     1 
Test2    2 
Iamlongverylongblah 2 
Etc     1 

我,所以我的線路輸出現在只關注個別線路(不工作)的

COUT < < VAR1 < < 「\ t \ t」 的< < VAR2 < < ENDL ;

,給了我這樣的:

Test     1 
Test2     2 
Iamlongverylongblah   2 
Etc     1 

回答

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

不給我我想要的..你確定這是正確的? – BobS 2008-11-09 02:00:28

+0

你忘了添加「<<左」。如果你想要左對齊的固定域,這是必需的。 – 2008-11-09 02:06:54

11

我建議使用Boost Format。使用像這樣的東西:

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

您必須在第一列找到最長字符串的長度。然後,您需要輸出第一列中每個字符串的長度爲最長字符串的字段。這意味着你必須先閱讀每一個字符串才能寫任何東西。

-2

你可以做到這一點

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