C/C++[codeup 2026]日期类

2026题目描述

编写一个日期类,要求按xxxx-xx-xx 的格式输出日期,实现加一天的操作。

输入
输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。

输出
输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。

样例输入
2
1999 10 20
2001 1 31
样例输出
1999-10-21
2001-02-01
提示
注意个位数日期前面要有0。


class Date:Data类:

类属性的初始化和结构体struct有点类似,使用一个和类名同名的类方法(函数来进行类变量的初始化)
初始化的构造函数,不用指定变量类型;
需要注意的是:

  • 类方法中的参数名不能和类变量名重复.
  • 习惯上给类变量加上m_前缀或者_前缀或后缀
  • 类方法也能接受外部变量的传入比如:month[13]的首地址
  • 如果要在类定义同一文件上定义实现类的方法,需要加上inline
  • inline Date::update( )
  • 类的声明当中,private可以省略,C++默认类变量private
  • 类对象(实例)声明时调用跟类名同名的构造函数Date date = Date(year, month, day, p)跟结构体的构造函数使用方法类似.还可以写的更紧凑Date data(year, month, day, p),p:将外部数组变量的手地址传给类方法.

类变量只能通过类方法来访问和修改,所以在类方法内使用形参完成变量的更新后,需要显式的赋值给类变量.

类实现


#include <iostream>
using namespace std;

class Date{
private:
    int m_y;
    int m_m;
    int m_d;
public:
    Date(int y = 0, int m = 0, int d = 0);
    void update(int y,int m, int d, int *p);
    void output();
};
inline Date::Date(int y, int m, int d) {
    m_y = y;
    m_m = m;
    m_d = d;

}

inline void Date::update(int y, int m, int d, int *p) {
    if (d < *(p+m)) d++;
    else {
        d = 1;
        m++;
        if (m == 13) {
            m = 1;
            y++;
        }
    }
    m_y = y;
    m_m = m;
    m_d = d;
}

inline void Date::output() {
     printf("%.4d-%.2d-%.2d\n",m_y,m_m,m_d);
}

int main() {
    int month[13] = {0, 31, 28, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31};
    int *p = month;
    int y, m, d, N;
    cin >>N;
    while(N--) {
        cin >>y >>m >>d;
        Date date = Date(y, m, d);
        date.update(y, m, d, p);
        date.output();
    }
    return 0;
}

过程实现

#include <iostream>
using namespace std;
int main() {
    int month[13] = {0, 31, 28, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31};
    int y, m, d, N;
    cin >>N;
    while(N--) {
        cin >>y >>m >>d;
        if (d < month[m]) {
            d++;
            output(y, m , d);
        }
        else {
            d = 1;
            m++;
            if (m == 13) {
                m = 1;
                y++;
            }
            printf("%.4d-%.2d-%.2d\n",y,m,d);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/u014281392/article/details/80673474
今日推荐