2

我目前正在将日期解析为程序。

格式可以是以下形式:

DDMMYYYY
DDMMYY
DDMM

DD/MM/YYYY
DD/MM/YY
DD/MM

除了日期之外,还会包含其他内容,例如:

19/12/12 0800 1000

这打破了我当前使用 boost::date_time 和 tokenizer 的实现。

对于这种情况,最好的建议是什么?我是否能够有一个更好的实现来允许以下内容:

19 Sep 12  // DD MMM YY

我的想法是将它们作为字符串以 DDMMYYYY 形式返回,以便在程序的其他部分使用。这是最好的方法还是有更好的建议/替代方案?

*编辑:

决定服用 DDMMYYYY、DDMMYY 和 DDMM 不太可行。只能使用带有反斜杠的日期。

输出保持不变,格式为:DDMMYYYY

4

3 回答 3

2

使用 boost.regex,您可以执行以下操作:

#include <iostream>
#include <boost/regex.hpp>

using namespace std;
using namespace boost;

int main(int argc, char* argv[])
{
    regex re("(\\d{2})\\/(\\d{2})(?:\\/?(\\d{2,4}))?");

    cmatch m;

    regex_search("1234 10/10/2012 4567", m, re);
    cout << m.str(1) + m.str(2) + m.str(3) << endl;
    regex_search("1234 10/10/12 4567", m, re);
    cout << m.str(1) + m.str(2) + m.str(3) << endl;
    regex_search("1234 10/10 4567", m, re);
    cout << m.str(1) + m.str(2) << endl;

    return 0;
}

像这样编译:

g++ --std=c++11 -o test.a test.cpp -I[boost_path] [boost_path]/stage/lib/libboost_regex.a
于 2012-10-24T14:00:38.567 回答
0

您可以使用一些正则表达式库或内置 sscanf函数。它比 reg exp 更原始,但可以在您的情况下使用

/* sscanf example */
#include <stdio.h>

int main ()
{
   char sentence []="data 1";
   char str [16];
   int i;

   sscanf(sentence,"%s %d",str,&i);
   printf("%s -> %d\n",str,i);

 return 0;
}
于 2012-10-24T11:22:31.920 回答
0

以下代码适用于我。

regex regExDate("\\d{4}-\\d{2}-\\d{2}");
string date = "abc:\\2016-09-12";
smatch match;

if (regex_search(date, match, regExDate))
{
 string strDate = match.str();
}
于 2016-07-21T10:04:13.633 回答