2017-06-01 52 views
-2

在我們學習C++的課程中,我被賦予了一個賦予類「日期」的任務。現在,我需要一個特定的功能,但我真的不知道如何處理這個問題。班級成員是日,月和年。函數需要一些代表天數的整數,並且應該設置一個新的日期,在那麼多天之後。例如,如果日期是2015年1月20日的(DD-MM-YY),並且我們將其作爲參數15傳遞,則新日期爲04.02.2015,問題是我必須考慮每月有多少天(考慮2月份28天),如果論據太大,我們進入明年,創建一個例外,打印出明年之前有多少天(考慮一年有365天)。也就是說,如果日期是20.12.2010,並且參數大於11,它應該打印11.更改某天的天數函數

我的嘗試使用while,我在開始時聲明int k = 0;而函數的參數是a,比我用(k!= a),但函數的主體變得非常混亂,因爲我使用的條件太多了。另一件事我試圖重疊運算符++,這肯定會給我更簡單的功能,因爲它內部只有一個循環,但我沒有解決問題,因爲在那個重疊的運算符函數中,我仍然使用很多if條件。

有沒有一些優雅的方式來做到這一點?代碼和解釋會很棒!謝謝!

+0

你能告訴我們你到目前爲止寫的課嗎? – WhatsThePoint

+0

這可能是脫離SO的主題 - 因爲你似乎已經設法編寫了一些代碼,但想要更好的方法來完成它。試試代碼審查網站?另外,不要害羞地看待開源實現,看看他們是如何做這種事情的 – doctorlove

+0

公曆日曆的一組日曆算法:http://howardhinnant.github.io/date_algorithms.html –

回答

0

只需確定你需要什麼,然後創建它,就像

static unsigned int Date::days_of_month(const Month month, const unsigned int year); 
void Date::operator+=(const unsigned int days); 

+ =可能看起來像

void Date::operator+=(const unsigned int days){ 
    increase current day by days 
    check if current day too large 
    if so, increase month (and maybe year) 
    repeat until day legal 
} 

概念清晰?沒有建立在你的輸出中的目的是爲了給你做些什麼,畢竟這是一個練習。也出於同樣的原因,故意將其寫入僞代碼中。嘗試創建一些代碼,如果你真的不能繼續,我會添加實際的代碼。

0
const int m_daysInMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; // first for index offset (no "zero" month) 
class date { 
public: 

int days=20, month=11, year=2012; 
void addDays(int daysNum) 
{ 
    int n_days = days, n_month = month; //new result. not saved, if there is an exception 
    while (daysNum > 0) 
    { 
     int daysToNextMonth = m_daysInMonth[n_month] - n_days + 1; //days before needs to change motn index 
     if (daysToNextMonth < daysNum) // change month 
     { 
      daysNum -= daysToNextMonth; 
      n_month++; 
      if (n_month > 12) 
      { 
       int daysLeft = m_daysInMonth[month] - days ; 
       n_month = month + 1; 
       while (n_month <= 12) 
       { 
        daysLeft += m_daysInMonth[n_month]; 
        n_month++; 
       } 
       throw daysLeft; 
      } 
      n_days = 1; // start of the month 

     } 
     else // set day in the month 
     { 
      n_days += daysNum; 
      daysNum = 0; 
     } 
    } 
    days = n_days; 
    month = n_month; 

} 

};