2016-10-19 5 views
0

Disons que je veux imprimer quelque chose de simple comme cette table:Comment puis-je formater la largeur dans le puttime?

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

J'aimerais accomplir cela comme:

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; 

Malheureusement puttime ne semble pas me permettre d'utiliser le champ drapeaux dans ses champs de format. De plus, ce puttime ne semble pas jouer avec setw.

Est-ce que ma seule option est de faire strftime puis d'utiliser cela avec setw?

Répondre

1

Voici une header-only library qui respecte les manipulateurs d'E/S:

#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); 
} 

Vous pouvez essayer vous-même en collant le code ci-dessus dans ce wandbox link.

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

Seront également travailler

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; 
    }