2016-05-24 10 views
-1

C++でYYYYMMDD形式に変換したい日付の束があります。C++部分文字列を抽出して特定の日付形式に変換する

 string shell_arg = inputStr; 
     shell_arg = "'" + shell_arg + "'"; 
     string cmd="date -d " + shell_arg + " +%Y%m%d 2>/dev/null"; 

     FILE *ls = popen(cmd.c_str(), "r"); 
     char retval[100]; 
     fgets(retval, sizeof(retval), ls); 

     pclose(ls); 

     if(!isdigit(retval[0])) 
     { 
      strcpy(retval,"99991231"); 
     } 

     return retval; 

これは、ほとんどの日付形式、および戻り値「99991231」を扱うことができないものを扱う:私は現在、ちょうどLinuxのdateコマンドを通してそれを実行し、次のコードを持っています。私は、それぞれ

20130901 
20121001 
20131101 

のように、各年の月の最初に評価することになっている

"Sep- 13" 
"12 -Oct" 
"13-Nov" 

のような形式の日付の数を持っています。どのようにこれを達成するでしょうか? regexを使うつもりなら、私の設定はGNU Cライブラリ(regexecとregex_matchとは対照的に、regexecとregcompを使用する)だけを使うことができます。

+0

**なぜ文字配列と 'std :: string'の両方を**両方使うのですか? –

+0

が - で分割され、両方の文字列をトリムし、 'atoi(s.data())'が '0'を返さないことを検出し、必要に応じて他のものと交換して、最初のものを年、月の2番目? – coyotte508

+0

これが正しいフォーマットであると判断したら、これは機能します。どのようにそれを行うにはどのような考え? @ coyotte508 – Danzo

答えて

0

あなたの入力は複数の形式になる可能性があるので、私は単純な状態機械を提案します。ステートマシンを使用すると、別のパターンをバックアップして再試行することができます。

std::getlineを使用して、std::stringタイプに日付を読み取ります。

std::istringstreamを使用してデータを解析できます。

関連する問題