给定字符串数组date [] ,任务是按升序对这些日期进行排序。
注意:每个日期的格式均为dd mmm yyyy ,其中:
- dd的域是[0-31] 。
- mmm的域是[1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月] 。
- 并且, yyyy是一个四位数的整数。
例子:
Input: dates[] = {“01 Mar 2015”, “11 Apr 1996”, “22 Oct 2007”}
Output:
11 Apr 1996
22 Oct 2007
01 Mar 2015
Input: dates[] = {“03 Jan 2018”, “02 Jan 2018”, “04 Jan 2017”}
Output:
04 Jan 2017
02 Jan 2018
03 Jan 2018
方法:从字符串提取日,月和年作为子字符串,然后按年份比较两个字符串,如果两个日期的年份相等,则比较其月份。如果月份也等于天数,则将决定哪个日期出现在日历的更早位置。
下面是上述方法的实现:
// C++ program to sort the dates in a string array
#include
using namespace std;
// Map to store the numeric value of each month depending on
// its occurrence i.e. Jan = 1, Feb = 2 and so on.
unordered_map monthsMap;
// Function which initializes the monthsMap
void sort_months()
{
monthsMap["Jan"] = 1;
monthsMap["Feb"] = 2;
monthsMap["Mar"] = 3;
monthsMap["Apr"] = 4;
monthsMap["May"] = 5;
monthsMap["Jun"] = 6;
monthsMap["Jul"] = 7;
monthsMap["Aug"] = 8;
monthsMap["Sep"] = 9;
monthsMap["Oct"] = 10;
monthsMap["Nov"] = 11;
monthsMap["Dec"] = 12;
}
// Comparator function to sort an array of dates
bool comp(string a, string b)
{
// Comparing the years
string str1 = a.substr(7, 5);
string str2 = b.substr(7, 5);
if (str1.compare(str2) != 0) {
if (str1.compare(str2) < 0)
return true;
return false;
}
// Comparing the months
string month_sub_a = a.substr(3, 3);
string month_sub_b = b.substr(3, 3);
// Taking numeric value of months from monthsMap
int month_a = monthsMap[month_sub_a];
int month_b = monthsMap[month_sub_b];
if (month_a != month_b) {
return month_a < month_b;
}
// Comparing the days
string day_a = a.substr(0, 2);
string day_b = b.substr(0, 2);
if (day_a.compare(day_b) < 0)
return true;
return false;
}
// Utility function to print the contents
// of the array
void printDates(string dates[], int n)
{
for (int i = 0; i < n; i++) {
cout << dates[i] << endl;
}
}
// Driver code
int main()
{
string dates[] = { "24 Jul 2017", "25 Jul 2017", "11 Jun 1996",
"01 Jan 2019", "12 Aug 2005", "01 Jan 1997" };
int n = sizeof(dates) / sizeof(dates[0]);
// Order the months
sort_months();
// Sort the dates
sort(dates, dates + n, comp);
// Print the sorted dates
printDates(dates, n);
}
输出:
11 Jun 1996
01 Jan 1997
12 Aug 2005
24 Jul 2017
25 Jul 2017
01 Jan 2019
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。