如何在 puttime 中格式化宽度?
How can I Format Width in puttime?
假设我想打印像这样简单的东西table:
January 1
February 2
March 3
April 4
May 5
June 6
July 7
August 8
September 9
October 10
November 11
December 12
我想这样完成:
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;
不幸的是 puttime
似乎不允许我在其格式字段中使用字段标志。此外,这个 puttime
似乎与 setw
不兼容。
我唯一的选择是做 strftime
然后将其与 setw
一起使用吗?
以下也有效
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;
}
这是一个尊重 I/O 操纵器的 header-only library:
#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);
}
您可以将上面的代码粘贴到此 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
假设我想打印像这样简单的东西table:
January 1
February 2
March 3
April 4
May 5
June 6
July 7
August 8
September 9
October 10
November 11
December 12
我想这样完成:
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;
不幸的是 puttime
似乎不允许我在其格式字段中使用字段标志。此外,这个 puttime
似乎与 setw
不兼容。
我唯一的选择是做 strftime
然后将其与 setw
一起使用吗?
以下也有效
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;
}
这是一个尊重 I/O 操纵器的 header-only library:
#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);
}
您可以将上面的代码粘贴到此 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