程序必须首先输入一堆提醒,例如:(Number)(提醒)。当输入0时,所有提醒必须按天的顺序输出。我只是不确定如何按日期对这些提醒进行排序。
#include <iostream>
using namespace std;
int main() {
string sentence[50];
int i = 0;
while (sentence[i - 1] != "0") {
cout << "Enter a day and reminder: ";
getline(cin, sentence[i]);
++i;
}
i = 0;
while (i <= 50 && sentence[i] != "0" && sentence[i] != "") {
cout << sentence[i] << "n";
++i;
}
}
使用std::sort
,特别是使用比较器的过载。
你必须编写一个比较器,它使用开头的数字数据来比较字符串。
下面是一个示例,基于上面的cppreference链接中的示例:
struct Comparator
{
bool operator()(string a, string b) const
{
...
return ...;
}
};
std::sort(&sentence[0], &sentence[i], Comparator());
将数字读取为数字,其余行读取为文本,进入某种结构。为该结构定义一个<
,使其按您期望的顺序排列。对值的集合进行排序。
struct Reminder {
int day;
std::string text;
}
bool operator <(const Reminder & lhs, const Reminder & rhs) {
return lhs.day < rhs.day;
}
std::ostream& operator<<(std::ostream& is, const Reminder & rem) {
return is << rem.day << " " << rem.text << "n";
}
int main() {
std::vector<Remainder> rems;
for (Remainder rem; (std::cin >> rem.day) && (rem.day != 0);) {
std::getline(std::cin, rem.text);
rems.push_back(rem);
}
std::sort(rems.begin(), rems.end());
for (const auto & rem : rems) {
std::cout << rem;
}
}