2012-12-22 32 views
7

Xin chào, tôi là người mới tham gia C++ - Tôi muốn tạo một chương trình để cộng và trừ thời gian bằng cách sử dụng định dạng HH: MM. Sample Input:Thêm và trừ thời gian

12:00 + 3:00 - 6:00 

Sample Output:

9:00 

Một Input Sample:

9:00 + 8:00 + 13:00 - 2:25 

Sample Output:

27:35 

Làm thế nào để tôi nhận được về vấn đề này? Tôi đã suy nghĩ chuyển đổi tất cả mọi thứ xuống đến giây và sau đó áp dụng các toán học sau đó sử dụng một mô-đun 60 chức năng để trả lại thời gian. Bất kỳ trợ giúp về xây dựng một chương trình như vậy?

+0

Có vẻ như bạn đã có nó. Chúc may mắn!. – littleadv

+0

Vấn đề duy nhất là tôi cần phải sử dụng các tập tin tiêu đề sau và thời gian lớp – Emptypeace

+1

bạn không 'cần' lớp thời gian cho điều này .. đó sẽ là một sự lãng phí thời gian .. (không có ý định chơi chữ) .. những gì bạn yêu cầu là khá cơ bản và có thể dễ dàng đạt được với các phép toán số học bình thường. – iKlsR

Trả lời

1

this (phần 1) và this (phần 2) nên chính xác những gì bạn muốn ..

bạn nhận được một lời giải thích rõ ràng và các bước tác giả thông qua các dòng mã của dòng và ông cũng sử dụng thực hành tốt nhất .

+1

Vì vậy, thực hành tốt nhất là gì? Bạn sẽ mô tả nó ở đây trong câu trả lời? (Nếu không, đây là câu trả lời chỉ có liên kết, không được khuyến khích.) – jogojapan

+0

..với thực hành tốt nhất, tôi đã mơ hồ một chút ..nhưng với tôi về tổ chức và cách trình bày của nó, ông đã vạch ra rõ ràng những gì mình muốn và mã được đặt ra trong các tệp riêng biệt ..vv và trong trường hợp này, không có gì khác tôi có thể gõ vào đó sẽ không được giải thích kỹ lưỡng qua (các) liên kết .. – iKlsR

+0

Vui lòng bao gồm một số mã tiếp theo. Chỉ liên kết với video dài 20 phút không phải là cách hay để trả lời câu hỏi. –

0

Giải pháp đơn giản nhất là chỉ để phân tích các đầu vào thành các số nguyên (sử dụng std::istream), chèn chúng vào một tm (loại quy định tại <time.h>), và gọi mktime (cũng trong <time.h>). (Có một số công cụ mới để xử lý thời gian trong C++ 11, nhưng tôi chưa thực sự quen thuộc với nó.)

1

Bạn cần cân nhắc ý nghĩa của từ 'thời gian'. Có hai khái niệm, thời gian và thời lượng. Nó không làm cho bất kỳ ý nghĩa để thêm hoặc trừ điểm thời gian từ mỗi khác. Nó có ý nghĩa để cộng và trừ các khoảng thời gian (kết quả trong một khoảng thời gian), và nó có ý nghĩa để cộng và trừ một khoảng thời gian với một thời điểm (kết quả là một thời điểm.). [IMG] việc phân biệt giữa hai khái niệm, nhưng tiêu chuẩn C++ <chrono> thư viện thực hiện khá tốt.

Dưới đây là một số mã mà lạm dụng loại C tm để có được một cặp vợ chồng khoảng thời gian từ người dùng, thêm chúng với nhau, và sau đó lạm dụng tm lại để xuất kết quả.

#include <iostream> // cout, cin 
#include <iomanip> // get_time, put_time 
#include <chrono> // hours, minutes, duration_cast 

int main() { 
    // input, get a couple durations to do arithmetic on 
    // technically std::tm represents a time point and get_time is supposed to 
    // parse a time point, but we treat the results as a duration 
    std::tm t; 
    std::cin >> std::get_time(&t, "%H:%M"); 

    auto duration1 = std::chrono::hours(t.tm_hour) + std::chrono::minutes(t.tm_min); 

    std::cin >> std::get_time(&t, "%H:%M"); 
    auto duration2 = std::chrono::hours(t.tm_hour) + std::chrono::minutes(t.tm_min); 

    // do the arithmetic 
    auto sum = duration1 + duration2; 

    // output 
    auto hours = std::chrono::duration_cast<std::chrono::hours>(sum); 
    auto minutes = std::chrono::duration_cast<std::chrono::minutes>(sum - hours); 

    t.tm_hour = hours.count(); 
    t.tm_min = minutes.count(); 

    std::cout << std::put_time(&t, "%H:%M") << '\n'; 
} 
0

I w anted để chia sẻ một số mã như câu hỏi yêu cầu cho một chương trình như một newbie để C + +. Đây không phải là mã hoàn hảo nhưng có thể là một thực hành tốt cho người mới sử dụng C++. Nó sẽ giải quyết việc cộng và trừ các dấu thời gian. tức là Bạn có thể cần thêm kiểm chứng thực thêm và có thể được mở rộng để đại diện ngày, giây và mili giây ...

#include <iostream> 
#include <string> 

using namespace std; 

/// Represents the timestamp in HH:MM format 
class Time { 
public: 
    // Construct the time with hours and minutes 
    Time(size_t hours, size_t mins); 

    // Construct the time using a string 
    Time(const string& str); 

    // Destructor 
    ~Time() {} 

    // Add a given time 
    Time operator + (const Time& rTime) const; 

    // Subtract a given time 
    Time operator - (const Time& rTime) const; 

    // Get the members 
    int Hours() const { return m_Hours; } 
    int Minutes() const { return m_Minutes; } 

    // Get the time as a string in HH:MM format 
    string TimeStr(); 

private: 
    // Private members 
    int m_Hours; // Hours 
    int m_Minutes; // Minutes 
}; 

// Constructor 
Time::Time(size_t hours, size_t mins) { 
    if (hours >= 60 || mins >= 60) { 
     cout << "Invalid input" << endl;  
     exit(0); 
    } 

    // Update the members 
    m_Hours = hours; 
    m_Minutes = mins; 
} 

// Add the given time to this 
Time Time::operator + (const Time& rTime) const { 
    // Construct the time 
    int nTotalMinutes(m_Minutes + rTime.Minutes()); 
    int nMinutes(nTotalMinutes % 60); 
    int nHours(nTotalMinutes/60 + (m_Hours + rTime.Hours())); 

    // Return the constructed time 
    return Time(nHours, nMinutes); 
} 

// Construct the time using a string 
Time::Time(const string& str) { 
    if(str.length() != 5 || str[2] != ':') { 
     cout << "Invalid time string. Expected format [HH:MM]" << endl; 
     exit(0); 
    } 

    // Update the members 
    m_Hours = stoi(str.substr(0, 2)); 
    m_Minutes = stoi(str.substr(3, 2)); 
} 

// Substact the given time from this 
Time Time::operator - (const Time& rTime) const { 
    // Get the diff in seconds 
    int nDiff(m_Hours*3600 + m_Minutes*60 - (rTime.Hours()*3600 + rTime.Minutes()*60)); 

    int nHours(nDiff/3600); 
    int nMins((nDiff%3600)/60); 

    // Return the constructed time 
    return Time(nHours, nMins); 
} 

// Get the time in "HH:MM" format 
string Time::TimeStr() { 
    // Fill with a leading 0 if HH/MM are in single digits 
    return ((m_Hours < 10) ? string("0") + to_string(m_Hours) : to_string(m_Hours)) 
      + string(":") 
      + ((m_Minutes < 10) ? string("0") + to_string(m_Minutes) : to_string(m_Minutes)); 
} 


int main() { 
    Time time1("09:00"); // Time 1 
    Time time2("08:00"); // Time 2 
    Time time3("13:00"); // Time 3 
    Time time4("02:25"); // Time 4 

    //time1 + time 2 + time3 - time4 
    cout << (time1 + time2 + time3 - time4).TimeStr() << endl; 

    return 0; 
} 

Output: 27:35

Các vấn đề liên quan