我的程序解析一个表示日期的字符串,格式为YYYYMMDD,并以星期几,月份,日期,年份的形式打印出来。例如,给定字符串20131224
,程序应该打印Sunday, December 24, 2013
。
我编写的程序正是如此:
#include <iostream>
#include <sstream>
#include <ctime>
#include <iomanip>
using namespace std;
int main() {
struct tm tm;
string s("20131224");
if (strptime(s.c_str(), "%Y%m%e", &tm)) {
cout << put_time(&tm, "%A, %B %e, %Y") << endl;
}
}
我的问题是,当给定一个带有前导零的日期字符串,比如
20131204
时,输出结果在月份和日期之间会多出一个空格,像这样:Sunday, December 4, 2013
。我知道如果使用
%d
而不是%e
,那么这个空格将被替换为零,但这也不是我想要的。我知道删除%B
和%e
之间的空格可以解决单个数字日期的问题,但对于两位数字的日期就不起作用了(因为它会打印Sunday, December24, 2013
)。我知道我可以使用某种正则表达式搜索来查找并替换那个双空格,但肯定有更简单的解决方案。如何从使用
put_time()
格式化的日期中同时删除前导空格和零?