2016-10-19 8 views
0

Lassen Sie sich sagen, dass ich etwas will einfach wie diese Tabelle drucken:Wie kann ich Breite in puttime formatieren?

for(tm i{ 0, 0, 0, 1, 0 }; i.tm_mon < 12; ++i.tm_mon) cout << put_time(&i, "%-9B") << i.tm_mon + 1 << endl; 

Leider puttime scheint mich Feld zu verwenden, damit nicht:

January 1 
February 2 
March  3 
April  4 
May  5 
June  6 
July  7 
August 8 
September 9 
October 10 
November 11 
December 12 

ich dieses wie erreichen möchte Flags in seinen Formatfeldern. Außerdem scheint diese puttime mit setw nicht nett zu spielen.

Ist meine einzige Option strftime zu tun und dann diese mit setw?

Antwort

1

Hier arbeitet ein header-only library, die die E/A-Manipulatoren respektieren:

#include "date.h" 
#include <iomanip> 
#include <iostream> 

int 
main() 
{ 
    using namespace date; 
    using namespace std; 
    auto m = jan; 
    do 
    { 
     cout << left << setw(10) << format("%B", sys_days{m/1/1}) << right 
      << unsigned(m) << '\n'; 
    } while (++m != jan); 
} 

du selbst heraus den obigen Code in diesen wandbox link durch Einfügen versuchen.

January 1 
February 2 
March  3 
April  4 
May  5 
June  6 
July  7 
August 8 
September 9 
October 10 
November 11 
December 12 
1

wird die folgende auch

for(tm i{ 0, 0, 0, 1, 0 }; i.tm_mon < 12; ++i.tm_mon) 
    { 
     std::stringstream oss; 
     oss << std::put_time(&i, "%B"); 
     string str = oss.str(); 
     cout << std::setiosflags(std::ios::left) << setw(10) << str << setw(2) << i.tm_mon + 1 << endl; 
    } 
Verwandte Themen