2013-06-30 55 views
5

應該是一個微不足道的問題,但發現setw只適用於它的直接下面的輸出,並不知道如何讓它適用於所有下面的輸出。如何允許setw適用於以下所有標準輸出?

例如,對於下面的代碼行

cout<<setw(3)<<setfill('0')<<8<<" "<<9<<endl; 

cout.width(3); 
cout.fill('0'); 
cout<<8<<" "<<9<<endl; 

我所要的輸出是008 009代替008 9

+0

可能重複[哪個iomanip操縱器是'粘'?](ht tp://stackoverflow.com/questions/1532640/which-iomanip-manipulators-are-sticky) – djf

+0

打印寬度爲3的''''會輸出3個空格,甚至是'「00」' – anatolyg

+0

或者[設置寬度在C++輸出流](http://stackoverflow.com/questions/7248627/setting-width-in-c-output-stream)。 – Simon

回答

2

setw不粘膩,所以你每次都要說:

cout << setfill('0') << setw(3) << 8 << " " 
    << setw(3) << 9 << endl; 
1

編寫冗長的std ::運輸及工務局局長(14)每次被耗時的任務,所以寫用作下面一個宏&:

宏:

#define W14 std::setw(14) 

實施例# 1:簡單用法:

std::cout << W14 << 8 << W14 << 9 << W14 << "ABC" << W14 << "DEFGHI" << std::endl; 

輸出:

8    9   ABC  DEFGHI 

實施例#2:我解決算法的問題,用它作爲下面,在for循環中:

std::cout 
    << W14 << suffixes[i].first.c_str() 
    << W14 << suffixes[i - 1].first.c_str() 
    << W14 << i 
    << W14 << lcp[i] << std::endl; 

輸出:美觀,在一個for循環中:

 a$    $    1    0 
     ana$   a$    2    1 
    anana$   ana$    3    3 
    banana$  anana$    4    0 
     na$  banana$    5    0 
    nana$   na$    6    2 
相關問題