1

文字列の日付を解析する関数を作成できますが、ここで車輪を再発明しているように感じます。1/4/2000 の文字列日付から 20000104 のようなより使いやすい int に取得するための、おそらく C++ に組み込まれた高速な方法はありますか?

4

2 に答える 2

3

検証を行うための組み込みのC++の方法も必要でない限り、「明らかな」解析は次のとおりです。

int parseDate(const std::string &input) {
    int month;
    int day;
    int year;
    if (std::sscanf(input.c_str(), "%d/%d/%d", &month, &day, &year) != 3) {
        // handle error
    } else {
        // check values to avoid int overflow if you can be bothered
        return 10000 * year + 100 * month + day;
    }
}

コードタイプの安全性を数行記述しsscanfたい場合は、代わりにストリームエクストラクタを使用できます。

確かに、標準ライブラリにはあなたの10000 * year + 100 * month + dayために行うことは何もありません。その正確な値に縛られていない場合は、正しい順序の整数が必要なだけです。次に、プラットフォームにいわゆる「ユリウス日」を通知する関数があるかどうかを確認できます。

于 2013-01-29T11:15:24.373 に答える
2

標準ライブラリ関数は ですstrptime()が、C++ でどの程度「クリーン」と見なされるかはわかりません。

で問題ない場合はstrptime()、次のように使用します。

struct tm when;

strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check return value.
const int sortable = 10000 * tm.tm_year + 100 * tm.tm_month + tm.tm_day;

もちろん、必要に応じて Boost を使用できます。関連するコーナーはPosix Timeのようです。

于 2013-01-29T10:19:00.390 に答える