2

現在、日付をプログラムに解析する作業を行っています。

形式は次の形式にすることができます。

DDMMYYYY
DDMMYY
DDMM

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

日付とともにそれを行うと、次のような他のコンテンツが含まれます。

19/12/12 0800 1000

これにより、boost::date_time とトークナイザーを使用する現在の実装が壊れます。

状況について、最良の提案は何ですか? 次のことを可能にするより良い実装を行うことができますか?

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

次のコードは私にとってはうまくいきます。

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 に答える
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 に答える