主题:关于日期输入问题!
pming1
[专家分:0] 发布于 2012-02-16 19:46:00
已知日期格式很多种,包括年、月、日,格式有yyy/mm/dd、dd/mm/yyyy、mm/dd/yyyy、和yyyy,mm,dd、mm,dd,yyyy、dd,mm,yyyy六种基本情况,现在,用户以任意形式输入一个日期,系统必须能自动识别日期格式,并将对应的值赋值给year,month,day。
当出现1/1/2002这种情况,就向用户询问,输入的是:mm,dd,yyyy,还是dd,mm,yyyy
急!在线坐等高手!
回复列表 (共3个回复)
沙发
fragileeye [专家分:1990] 发布于 2012-02-17 00:59:00
如果题目仅是这些要求,那是很简单的。
“当出现1/1/2002这种情况,就向用户询问” ---不知道可不可以这么想,只要不是yyyy,mm,dd或yyyy/mm/dd的形式,都可以以询问的方式结束
对于解析yyyy,mm,dd或yyyy/mm/dd的形式,其实就是对这么一个字符串解析,遇到','或'/'进行操作,至于怎么一次遍历这个字符串得到日期,就是你们学的怎么一边得到几个连续的字符,变成数字。“1234”怎么得到1234这个不难吧。。
这只是一种思路,仅供参考。
板凳
bruceteen [专家分:42660] 发布于 2012-02-17 08:37:00
我大体写一下伪代码
if( 3 == scanf( "%u%*c%u%*c%u%", &a, &b, &c ) )
{
// 判断a是年,还是c是年
if( a > 31 ) yy=a, a=c;
else yy=c;
// 判断yy年a月b日是否是一个合法的日期
// 判断yy年b月a日是否是一个合法的日期
// 如果都不是,错误
// 如果都是,询问
// 如果只有一个是,搞定
}
判断yy年a月b日是否是一个合法的日期
{
if( a<0 || a>12 )
return false;
static s[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
if( b<0 || b>s[a-1] )
return false;
if( a==2 && b=29 }
{
bool isLeep = …… // 是否是闰年
return isLeep;
}
return true;
}
3 楼
fragileeye [专家分:1990] 发布于 2012-02-17 13:57:00
if( 3 == scanf( "%u%*c%u%*c%u%", &a, &b, &c ) )
//这个好。
我来回复