2017-02-25 35 views
1

只得到數據的中間環節我有一個這樣的數組:C++從數組

string dates [5] = { "15-JAN-17", "15-JAN-17", "17-JAN-17", 
        "04-FEB-17", "04-FEB-17" }; 

string startDate = "15-JAN-17"; 
string endDate = "04-FEB-17"; 

是否有一種方式來獲得的開始日期和結束日期之間的數據?什麼我需要是這樣的:

"15-JAN-17", "17-JAN-17", "04-FEB-17" 

我打算使用一個for循環做搜索,我會把所有的結果到名爲chosenDates另一個數組。我怎樣才能得到這個結果,也因爲會有重複的日期,我怎樣才能確保程序從第一個結果開始取得,並在startDate和endDate提供的最後結果結束?

編輯:我還應該提到,即使數組變大,日期也會一直排序。

+0

您的意思是獲取數組中兩個指針之間的數據,或者獲取數組中兩個對象之間的數據,這些對象與提到的字符串相同? – user

+0

你的代碼是否可以編譯? – WhiZTiM

+0

'日期'的類型真的**'int' **'[5]'? – Angew

回答

0

鑑於您計劃對這些字符串執行的各種操作,我認爲定義一些新的自定義類型來表示日期是最有意義的。構造函數會將日期字符串解析爲明確的年份,月份和日期,並且您可以爲每個字段提供讀取訪問權限。一旦你這樣做了,你可以在你的日期類型上重載關係運算符,這樣你就可以按照升序來比較和排序日期。

一旦你有這樣的事情,你有一些關於如何進行的選項。一種方法是一切扔到std::set,它會自動消除重複和維護的排序順序,這將讓你執行這樣的範圍查詢:

std::set<Date> dates = /* ... */ 
for (auto itr = dates.lower_bound(Date{"15-JAN-17"}), 
    end = dates.upper_bound(Date{"04-FEB-17"}); 
    itr != end; ++itr) { 
    // Use *itr 
} 

你也可以在std::vector使用std::unique刪除重複藏匿一切,然後使用std::lower_boundstd::upper_bound選擇您想要使用的範圍。