2017-02-25 34 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选择您想要使用的范围。