UT源码 005
NextDate函数问题
NextDate函数说明一种复杂的关系,即输入变量之间逻辑关系的复杂性
NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一天的日期。 要求输入变量month、day和year均为整数值,并且满足下列条件:
条件1 1≤ month ≤12 否则输出,月份超出范围
条件2 1≤ day ≤31 否则输出,日期超出范围
条件3 1912≤ year ≤2050 否则输出:年份超出范围
String nextdate(int m,int d,int y)
注意返回值是字符串。
程序要求:
1)先显示“请输入日期”
2)不满足条件1,返回:“月份超出范围”;不满足条件2,返回:“日期超出范围”;不满足条件3,返回:“年份超出范围”;如果出现多个不满足,以最先出现不满足的错误返回信息。
3)条件均满足,则输出第二天的日期:格式“****年**月**日”(如果输入2050年12月31日,则正常显示2051年1月1日
源码:
1 #include <iostream> 2 #include <sstream> 3 #include <string> 4 using namespace std; 5 6 string nextdate(int month,int day,int year) 7 { 8 int isleap[]={31,29,31,30,31,30,31,31,30,31,30,31}; 9 int noleap[]={31,28,31,30,31,30,31,31,30,31,30,31}; 10 stringstream m,d,y; 11 12 if (month<1 || month>12) 13 { 14 return "月份超出范围"; 15 } 16 if (day<1 || day>31) 17 { 18 return "日期超出范围"; 19 } 20 if (year<1912 || year>2050) 21 { 22 return "年份超出范围"; 23 } 24 25 if ((year%4==0 && year%100!=0) || year%400==0)//闰年 26 { 27 if (day<isleap[month-1]) 28 { 29 d<<day+1; 30 m<<month; 31 y<<year; 32 } 33 else if (day==isleap[month-1])//该月的最后一天 34 { 35 if (month==12)//一年的最后一天 36 { 37 d<<1; 38 m<<1; 39 y<<year+1; 40 return y.str()+"年"+m.str()+"月"+d.str()+"日"; 41 } 42 d<<1; 43 m<<month+1; 44 y<<year; 45 } 46 else 47 { 48 return "日期超出范围"; 49 } 50 51 } 52 else//非闰年 53 { 54 if (day<noleap[month-1]) 55 { 56 d<<day+1; 57 m<<month; 58 y<<year; 59 } 60 else if (day==noleap[month-1])//该月的最后一天 61 { 62 if (month==12)//一年的最后一天 63 { 64 d<<1; 65 m<<1; 66 y<<year+1; 67 return y.str()+"年"+m.str()+"月"+d.str()+"日"; 68 } 69 d<<1; 70 m<<month+1; 71 y<<year; 72 } 73 else 74 { 75 return "日期超出范围"; 76 } 77 } 78 return y.str()+"年"+m.str()+"月"+d.str()+"日"; 79 80 } 81 82 83 int main() 84 { 85 while(1) 86 { 87 cout<<"请输入日期(格式: 月 日 年):"<<endl; 88 int month,day,year; 89 cin>>month>>day>>year; 90 cout<<nextdate(month,day,year)<<endl; 91 92 } 93 return 0; 94 }