2012-10-16 19 views
1

我正在一個簡單的NLP項目給定一個字符串,各種參數將被確定。提取日期的字符串,並確定哪些更早

鑑於以下輸入:

07122012 12102012 

代碼:

string REGEX_DATE = "((\\d{2})/(\\d{2})/(\\d{4}))"; 

regex expressionFormat(REGEX_DATE); 

sregex_token_iterator i(input.begin(), input.end(), expressionFormat, 1); 

sregex_token_iterator j; 

while(i != j) 
{ 
result = *i++; 
} 

什麼是存儲和比較結果的最佳方式? (確定哪些日早)

回答

1

最好的辦法是建立和比較的日期,而不是字符串或數字:

#include <iostream> 
#include <string> 
#include <boost/date_time.hpp> 

int main() 
{ 
    std::string input = "07122012 12102012"; 

    std::istringstream buf(input); 
    buf.imbue(std::locale(buf.getloc(), 
       new boost::posix_time::time_input_facet("%d%m%Y"))); 

    boost::posix_time::ptime d1, d2; 
    buf >> d1 >> d2; 

    if(d1 < d2) 
     std::cout << d1 << " before " << d2 << '\n'; 
    else 
     std::cout << d2 << " before " << d1 << '\n'; 
} 

在線演示:http://liveworkspace.org/code/989ba879e622aed7866e7dba2d0f02ee

+0

我實際使用升壓轉換器的正則表達式分詞器如果你想知道爲什麼我要問 –

+0

@Larry Lee'buf >> d1 >> d2'解析包含DDMMYYYY格式的空格分隔日期的字符串,並將結果存儲在'd1'中'd2'。你當然可以使用正則表達式解析它,並將相應的正則表達式匹配轉換爲日期/時間對象,以相同的方式進行比較,或者使用boost的日期和時間類的各種構造函數,這只是更短的一步。 – Cubbi