难点:
1. 输入格式太多种,进行转换难度大
2. 懂得通过find和substr对字符串进行切割
3.知道用hashtabe进行月份的转化
class Date
{
public:
Date(){}
Date(string str)
{
unordered_map<string, int>hashTable;
hashTable["January"] = 1;
hashTable["February"] = 2;
hashTable["March"] = 3;
hashTable["April"] = 4;
hashTable["May"] = 5;
hashTable["June"] = 6;
hashTable["July"] = 7;
hashTable["August"] = 8;
hashTable["September"] = 9;
hashTable["October"] = 10;
hashTable["November"] = 11;
hashTable["December"] = 12;
hashTable["Jan"] = 1;
hashTable["Feb"] = 2;
hashTable["Mar"] = 3;
hashTable["Apr"] = 4;
hashTable["May"] = 5;
hashTable["Jun"] = 6;
hashTable["Jul"] = 7;
hashTable["Aug"] = 8;
hashTable["Sep"] = 9;
hashTable["Oct"] = 10;
hashTable["Nov"] = 11;
hashTable["Dec"] = 12;
vector<string>vec;
int pos = 0,found=0;
string temp = "/, -";
while((found=str.find_first_of(temp,pos))!=string::npos)
{
vec.push_back(str.substr(pos, found - pos));
pos = found + 1;
}
vec.push_back(str.substr(pos));
auto beg = vec.begin();
while (beg != vec.end())
{
if (isalpha((*beg)[0]))
{
month = hashTable[*beg];
}
else
{
unsigned temp = stoi(*beg);
if (beg == vec.begin() && temp <= 31)
{
day = temp;
++beg;
continue;
}
if (temp > 31)
{
year = temp;
}
else if (!month&&temp<=12)
{
month = temp;
}
else
{
day = temp;
}
}
++beg;
}
}
unsigned getYear()
{
return year;
}
unsigned getMonth()
{
return month;
}
unsigned getDay()
{
return day;
}
private:
unsigned year;
unsigned month=0;
unsigned day;
};
int main(int argc,char * argv[])
{
string str = "2021-2-3";
Date date=Date(str);
cout << date.getYear() << " " << date.getMonth() << " " << date.getDay() << endl;
return 0;
}
样例:
2023-2-2
January 1,1900
1/1/1990
Jan 1 1900
纯CPP萌新,如有错误,恳请大佬在评论区指教!!