1

我有一个我一直在处理的受让人,我被困在最后一个功能上。

使用函数 void Increment(int numDays = 1)

此函数应将日期向前移动参数中给出的日历天数。该参数的默认值为 1 天。例子:

Date d1(10, 31, 1998); // Oct 31, 1998
Date d2(6, 29, 1950); // June 29, 1950

d1.Increment(); // d1 is now Nov 1, 1998
d2.Increment(5); // d2 is now July 4, 1950

我不明白该怎么做。

void Date::Increment(int numDays = 1)

我被卡住了,我知道如何通过 ++ 运算符告诉函数递增,但是当我必须让函数将一个月的最后一天递增到第一个或最后一个结束时,我感到困惑例如该月的日期。10 月 31 日到 11 月 1 日,或 6 月 29 日到 7 月 4 日。我可以在 7 月 5 日到 7 月 8 日做,但变化的月份让我感到困惑

4

3 回答 3

1

您将需要存储每个月有多少天的列表(或数组)。如果您添加numDays到当前日期并且它变得比这更大,您还需要增加月份。

例如,我们有一个表示 2010 年 3 月 29 日的日期对象。我们调用Increment(4)并将 4 加到 day 变量中,以 2010 年 3 月 33 日结束。我们现在检查 March 有多少天并找出它是 31(例如daysInMonth[3] == 31)。由于 33 大于 31,我们需要从 33 中减去 31 并增加月份,以 2010 年 4 月 2 日结束。

您将需要对闰年的二月进行特殊处理(任何可以被 4 整除且不能被 100 整除的年份,除非它也能被 400 整除)以及在 12 月底之后递增。

于 2010-09-21T00:57:54.687 回答
0

First, construct a function like

 int numDaysSinceBeginning( Date );

which counts number of days elapsed from a well known date (e.g. Jan 1 1900) to the specific Date.

Next, construct another function which converts that day-delta to Date

Date createDateWithDelta( int );

From your example,

Date d2(6, 29, 1950); // June 29, 1950

int d2Delta = numDaysSinceBeginnning( d2 );

Date d2Incremented = createDateWithDelta( d2Delta + 5 ); // d2Incremented is July 4, 1950
于 2010-09-21T01:35:54.440 回答
0

30 天有 9 月、4 月、6 月和 11 月。其余的有 31 天,除了 2 月有 28 天,闰年除外(每 4 年,2008 年是最后一年),闰年有 29 天。

这应该足以让你继续前进。

于 2010-09-21T00:52:23.220 回答