C ++只从数组中获取数据的中间部分

时间:2017-02-25 18:55:28

标签: c++ string

我有一个这样的数组:

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提供的最后结果结束?

编辑:我还应该提一下,即使数组变大,日期也会被排序。

1 个答案:

答案 0 :(得分: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选择您希望工作的范围用。