回 帖 发 新 帖 刷新版面

主题:关于日期输入问题!

已知日期格式很多种,包括年、月、日,格式有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个回复)

沙发

如果题目仅是这些要求,那是很简单的。
“当出现1/1/2002这种情况,就向用户询问” ---不知道可不可以这么想,只要不是yyyy,mm,dd或yyyy/mm/dd的形式,都可以以询问的方式结束
对于解析yyyy,mm,dd或yyyy/mm/dd的形式,其实就是对这么一个字符串解析,遇到','或'/'进行操作,至于怎么一次遍历这个字符串得到日期,就是你们学的怎么一边得到几个连续的字符,变成数字。“1234”怎么得到1234这个不难吧。。
这只是一种思路,仅供参考。

板凳

我大体写一下伪代码

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 楼

if( 3 == scanf( "%u%*c%u%*c%u%", &a, &b, &c ) )

//这个好。

我来回复

您尚未登录,请登录后再回复。点此登录或注册