日期识别案例

  • 任务描述

  1. X同学最近非常烦,因为他正面对一大堆日期数据愁眉不展,原因是那些日期书写的极其不规范,不仔细辨别根本认不清是哪一天。
  2. 以下每个日期中的三个数,年月日的位置是不确定的,假设其中最大的数表示年份,1-12范围的数表示月份,1-31范围的数表示日期,如果月日的范围都是1-12则按前月后日的顺序识别。
  3. 例如:
  4. 2/3-123 识别为0123年2月3日,合法;
  5. 13+12+45 识别为0045年12月13日,合法;
  6. 12=3=13 识别为0013年12月3日,合法;
  7. 29,2,2019 识别为2019年2月29日,这一天不存在,不合法;
  8. 12@12#12 识别为0012年12月12日,合法;
  9. 35.36.37 识别为0037年XX月XX日,XX超出月份和日期范围,不合法;
  10. 11*30*30 识别为0030年11月30日,合法;
  11. 现在X要编程判断一下那些日期到底是否合法,你们说他能编出来吗。
  • 输入格式:

  1. 一行,以X-Y-Z形式表示的一个日期,其中X、Y、Z为不超过4位的正整数,“-”为一个分隔字符,可能为任何符号。

    输出格式:

    若该日期为合法存在的日期,以“YYYY-MM-DD”的形式输出该日期的规范式,年4位,月日2位,不足前补0。 若该日期为不合法日期,输出:Invalid Date!。

    输入样例:  25-30-5

  2. 输出样例:  0030-05-25

  3. 输入样例:  2019-32-09

  4. 输出样例: Invalid Date!

    #include "stdio.h"
    #include "string.h"
    int getMonth(int a, int b){
        if(a <= 12 && b <= 12) {
            return a;
        }
        return a <= 12 ? a : b;
    }
    int getDay(int a, int b){
        if(a <= 12 && b <= 12) {
            return b;
        }
        return a > 12 ? a : b;
    }
    char* judgeDay(int month, int day, int year){
        switch (month) {
            case 1:case 3:case 5:
            case 7:case 8:case 10:
            case 12:
                if(day > 31) return "Invalid Date!";
                break;
            case 4: case 6:case 9:
            case 11:
                if(day > 30) return "Invalid Date!";
                break;
            case 2:
                if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
                    if(day > 29) return "Invalid Date!";
                }else{
                    if(day > 28) return "Invalid Date!";
                }
                break;
        }
        return "0";
    }
    void addDayOfMonthLing(int month, int day){
        if(month < 10 && day < 10)
            printf("0%d-0%d", month, day);
        else if(month < 10)
            printf("0%d-%d",  month, day);
        else if(day < 10)
            printf("%d-0%d", month, day);
        else
            printf("%d-%d", month, day);
    }
    
    void main(){
        int a, b, c, year, day, month;
        scanf("%d-%d-%d", &a, &b, &c);
        year = a >= b ? a : b;
        year = year >= c ? year : c;
        if(year == a ){
            month = getMonth(b , c);
            day = getDay(b, c);
            if(month > 12 || month < 1){
                printf("Invalid Date!");
                return;
            }
            if(strcmp(judgeDay(month, day, year), "0") == 0){
                printf("%04d-%02d-%02d", year, month, day);
            }else{
                printf("%s", judgeDay(month, day, year));
                return;
            }
        }else if(year == b ){
            month = getMonth(a , c);
            day = getDay(a, c);
            if(month > 12 || month < 1){
                printf("Invalid Date!");
                return;
            }
            if(strcmp(judgeDay(month, day, year), "0") == 0) {
                printf("%04d-%02d-%02d", year, month, day);
            }
        }else if(year == c ){
            month = getMonth(a , b);
            day = getDay(a, b);
            if(month > 12 || month < 1){
                printf("Invalid Date!");
                return;
            }
            if(strcmp(judgeDay(month, day, year), "0") == 0){
                printf("%04d-%02d-%02d", year, month, day);
            }else{
                printf("%s", judgeDay(month, day, year));
                return;
            }
        }
    }
  5. 初次公布,若是有不好的地方,还望见谅

你可能感兴趣的:(c语言)