1. 程式人生 > >Coursera 學習記錄:Tomorrow never knows?(實現日期加一的操作)

Coursera 學習記錄:Tomorrow never knows?(實現日期加一的操作)

描述

甲殼蟲的《A day in the life》和《Tomorrow never knows》膾炙人口,如果告訴你a day in the life,真的會是tomorrow never knows? 相信學了計概之後這個不會是難題,現在就來實現吧。 讀入一個格式為yyyy-mm-dd的日期(即年-月-日),輸出這個日期下一天的日期。可以假定輸入的日期不早於1600-01-01,也不晚於2999-12-30。

輸入 輸入僅一行,格式為yyyy-mm-dd的日期。 輸出 輸出也僅一行,格式為yyyy-mm-dd的日期。

提示

閏年的標準: (1)普通年能被4整除且不能被100整除的為閏年。(如2004年就是閏年,1901年不是閏年) (2)世紀年能被400整除的是閏年。(如2000年是閏年,1100年不是閏年) 可以利用一個字元變數吃掉輸入的短橫線(減號),輸出時請活用setfill和setw 控制符。

setfill example


#include <iostream>     // std::cout, std::endl
#include <iomanip>      // std::setfill, std::setw

int main () {
std::cout << std::setfill ('x') << std::setw (10);
std::cout << 77 << std::endl;
return 0;
}

在這裡
cout << year << '-' << setw(2) << setfill('0') << month << '-' << setw(2)<< setfill('0')<< day << endl;
#include<iostream>
#include<iomanip>
using namespace std;

// 通過字元變數將-吃掉,即:在輸入是用char字元變數來接收
int main() {
	int year, month, day;
	char m, n;
	cin >> year >> m >> month >> n >> day;

	//下面開始判斷是否為閏年
	bool leap = 0;
	bool special = 0;
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
		leap = 1;
	}
	// 先處理特殊:閏年以及月增和年增
	// 通過一個bool值,來表示是否發生了月增或者年增?
	if (month == 2) {
		if (leap == 1 && day == 29) {
			month += 1;
			day = 1;
			special = 1;
		}
		if (leap == 0 && day == 28) {
			month += 1;
			day = 1;
			special = 1;
		}
	}
	//然後是處理年增
	if (0 < month <= 12) {

		if (month == 12 && day == 31) {
			year += 1;
			month = 1;
			day = 1;
			special = 1;
		}
		if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10) && day == 31) {
			month += 1;
			day = 1;
			special = 1;
		}
		if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 30) {
			month += 1;
			day = 1;
			special = 1;
		}

		// 這裡使用else並不好
		//會出現2000-00-00變成2000-00-01
		//else {
		//	day += 1;
		//}
		if (special == 0) {
			day += 1;
		}
	}
	cout << year << '-' << setw(2) << setfill('0') << month << '-' << setw(2) << setfill('0') << day << endl;

	return 0;

}