01/10/2018, 15:43

Tính số ngày trong C++

Em có kiểu mảng char ngaymuon[15], ngaytra[15];
Lúc nhập vào có định dạng là DD/MM/YYY vd như nhập là :
ngaymuon: 23/9/2018
ngaytra: 05/10/2018
làm sao để e tính số ngày từ lúc mượn đến trả ạ??
hay là có cánh nào khai báo ngày nãy dễ dàng hơn ko nhĩ.
e cám ơn nhiều ạ!!!

Aster-Dynos viết 17:48 ngày 01/10/2018

Đây là cách của mình:

#include<iostream>

class Date{
    public:
        int day;
        int month;
        int year;

        Date(int day, int month, int year): day(day), month(month), year(year){}
};


/* Compute by start counting (from 0) all the way to "borrow" date then count
 * again (from 0) all the way to "pay" date. Then we can just subtract "pay"
 * from "borrow" to get our result.
 *
 * NOTE: THIS DOES NOT TAKE "LEAP YEAR" INTO ACCOUNT
 */
int Get_Date_Differences(Date borrow, Date pay){
    //list of number of days in each month
    //treats [1] as January, [2] as February, ...
    //ignore [0] cause we will never use it 
    int days_of_month[13] = {0,
                             31,28,31,30,31,30,
                             31,31,30,31,30,31};

    //add up all the days and years first for "borrow" date
    long total_borrow_day = borrow.year * 365 + borrow.day;
    //now to add the months for "borrow" date
    for(int i = 1; i < borrow.month; i++){
        total_borrow_day += days_of_month[i];
    }

    //do the same for "pay" date
    long total_pay_day = pay.year * 365 + pay.day;
    for(int i = 1; i < pay.month; i++){
        total_pay_day += days_of_month[i];
    }

    //compute the differences
    return (total_pay_day - total_borrow_day);    
}

int main(){
    //format is in dd/mm/yr
    Date borrow (23,9,2018);
    Date pay (5,10,2018);
    
    std::cout << "You have " << Get_Date_Differences(borrow,pay) 
        << " days left to pay" << std::endl;
    return 0;
}
Output: You have 12 days left to pay

Thay vì đếm từng ngày từng ngày từ “borrow” date tới “pay” date (rất lâu và tốn nhiều thời giang) thì cách mình xẻ đếm từng ngày (bắc đầu ở 0) tới “borrow” date trước, rồi thêm một lần nữa (bắc đầu từ 0 lại) tới “pay” date. Sâu đó chỉ cần lấy (pay - borrow) để tính số ngày thôi.

À mà code mình không có tính cạnh trường hợp về “năm nhuận” nhé. Cái đó bạn phải add thêm nếu như cần.

Khuyết Danh viết 17:57 ngày 01/10/2018

e cám ơn ạ, nhưng thầy e chỉ yêu cầu là khao báo rồi nhập 1 lần thôi vậy á, cái này nằm trong struct

Lương Thế Hải viết 17:46 ngày 01/10/2018

Bạn có thể dùng hàm difftime() trong thư viện <ctime> của C++

Bài liên quan
0