判断 YYYYMMDD 是否为有效日期(UPDATE)

原解法: 《判断 YYYYMMDD 是否为有效日期》

整理自: http://apps.topcoder.com/wiki/display/tc/SRM+583

主要改进:
1. 使用 sscanf 来提取年、月、日; 比我那样用数组, 再用 atoi 来转化简明多了;
2. 使用数组来存放各个月的天数, 只在闰年时对二月的天数+1; 同样比使用 switch 要简明的多.

代码:

bool validBirthDay(string b){
  int y,m,d;
  // extract year, month and day integers:
  sscanf(b.c_str(), "%4d%2d%2d", &y,&m,&d);
  // an array with the number of days in each month
  int monthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31,31, 30, 31, 30, 31};
  // Leap year:
  if (y % 400 == 0 || (y % 100 != 0 && y % 4 == 0) ) {
      monthDays[2]++; //Increment February's days.
  }
  // Valid month, valid day:
  if ( !(1 <= m && m <= 12) || !( 1 <= d && d <= monthDays[m]) ) { 
     return false;
  }
  return true;
}
环境: gcc version 4.6.4 (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04)   

你可能感兴趣的:(闰年,有效日期)