📌  相关文章
📜  按升序对日期字符串数组进行排序

📅  最后修改于: 2021-04-27 06:30:05             🧑  作者: Mango

给定字符串数组date [] ,任务是按升序对这些日期进行排序。
注意:每个日期的格式均为dd mmm yyyy ,其中:

  • dd的域是[0-31]
  • mmm的域是[1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月]
  • 并且, yyyy是一个四位数的整数。

例子:

方法:从字符串提取作为子字符串,然后按年份比较两个字符串,如果两个日期的年份相等,则比较月份。如果月份也等于天数,则将决定哪个日期出现在日历的更早位置。

下面是上述方法的实现:

// 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等的更多准备工作,请参阅“完整面试准备课程”