【C++ 练习】如何判断一个日期字符串是否合法?
djfu 2006-12-12 10:26:11 前几天恰好碰到这一个问题,开始不想自己写,上网搜了一下,搜到N多的都是JavaScript的,用到很多其内部函数,更有人夸张其词的把这个做成了一个长达1000多行的C++类,C++类如此杀鸡用牛刀,我无语了。。。
没办法,自己写吧。分享一下,有更好的意见请提出。
#pragma warning(disable: 4786)
#pragma warning(disable: 4096)
#include <iostream>
#include <map>
using namespace std;
bool IsDateValid(const char *DateString)
{
map<int, int> mpMonDay;
mpMonDay[1] = 31;
mpMonDay[2] = 28;
mpMonDay[3] = 31;
mpMonDay[4] = 30;
mpMonDay[5] = 31;
mpMonDay[6] = 30;
mpMonDay[7] = 31;
mpMonDay[8] = 31;
mpMonDay[9] = 30;
mpMonDay[10]= 31;
mpMonDay[11] = 30;
mpMonDay[12] = 31;
bool bLeapYear;
int nYear, nMonth, nDay;
sscanf(DateString,"%04d%02d%02d", &nYear, &nMonth, &nDay);
if((nYear < 1900) || (nMonth < 1) || (nMonth > 12) || (nDay < 1) || (nDay > 31))
return false;
bLeapYear = false;
if((nYear % 4 == 0) && (nYear % 100 != 0))
bLeapYear = true;
else if(nYear % 400 == 0)
bLeapYear = true;
if(bLeapYear)
mpMonDay[2] = 29;
else
mpMonDay[2] = 28;
if(nDay > mpMonDay[nMonth])
return false;
return true;
}
int main()
{
cout << "20060230 is a " << (IsDateValid("20060230") == true? " VALID": "INVALID")<< " date" << endl;
cout << "20000229 is a " << (IsDateValid("20000229") == true? " VALID": "INVALID")<< " date" << endl;
return 0;
}