2016-05-24 24 views
-1

我有一堆日期,我想通過C++轉換成YYYYMMDD格式。目前,我有下面的代碼剛剛運行它通過Linux date命令: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」。我有一個數字格式的日期,就像

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

,都應該評估的第一個月每一年的,像

20130901 
20121001 
20131101 

分別。你會如何做到這一點?我應該注意到,如果我們要使用正則表達式,我的配置只能使用GNU C庫(它使用regexec和regcomp,而不是regex_match)。

+0

爲什麼你使用**既是一個字符數組又是'std :: string'? –

+0

用 - 分割,修剪兩個字符串,檢測哪個atoi(s.data())不返回'0',並在需要時與另一個交換,然後使用第一個作爲年份,第二個月呢? – coyotte508

+0

一旦我確定它是正確的格式,這將工作。任何想法如何做到這一點? @ coyotte508 – Danzo

回答

0

由於您的輸入可以是多種格式,我建議一個簡單的狀態機。狀態機將允許您備份並重試不同的模式。

使用std::getline將日期讀入std::string類型。

您可以使用std::istringstream解析數據。