2012-12-22 19 views
7

Hey guys C++ ile yeni - HH: MM formatını kullanarak zaman eklemek ve çıkarmak için bir program yapmak istedim. Örnek Giriş:Ekleme ve Çıkarma Zamanı

12:00 + 3:00 - 6:00 

Örnek çıktı:

9:00 

Başka Örnek Giriş:

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

Örnek çıktı:

27:35 

Nasıl bu konuda var? Herşeyi saniyelere dönüştürmeyi düşünüyordum ve sonra matematiği uyguladıktan sonra zamanı döndürmek için bir modül 60 fonksiyonunu kullanıyorum. Böyle bir program oluşturmanın yardımı var mı?

+0

görünüyor. İyi şanslar!. – littleadv

+0

Tek sorun şu üstbilgi dosyası ve – Emptypeace

+1

zaman sınıfını kullanmanız gerektiğidir, bunun için zaman sınıfına 'gerek duymazsınız' .. bu zaman kaybı olur .. (hiçbir amaçlanmadı) .. ne Gereksinim oldukça basittir ve normal aritmetik işlemlerle kolayca elde edilebilir. – iKlsR

cevap

1

this (bölüm 1) ve this (bölüm 2) istediğini tam olarak ..

net bir açıklama ve satır satır kod ile yazar adımlarını almak ve o da en iyi uygulamayı kullanan olmalı .

+1

Peki, en iyi uygulama hangisidir? Cevabı burada açıklayacak mısın? (Aksi taktirde bu sadece bir cevaptır, bu da cesaret kırılır.) – jogojapan

+0

.. en iyi uygulama, biraz muğlak sanırım ..ama bana göre onun organizasyon ve sunum, o açıkça ne istediğini ve kod ayrı dosyalar halinde ortaya koydu .. vb ve bu durumda, ben iyice açıklanamaz yazmış olabilir başka bir şey yoktu link (ler) .. – iKlsR

+0

Lütfen bir dahaki sefere bir kod ekleyin. Sadece 20 dakikalık bir videoya bağlantı vermek, bir soruyu yanıtlamanın iyi bir yolu değildir. –

0

basit çözüm sadece, (std::istream kullanarak) tamsayılar içine giriş ayrıştırmak bir tm (<time.h> tanımlanan tip) içine yerleştirin ve (aynı zamanda <time.h> olarak) mktime aramak. (C++ 11'de zamana göre işlem yapmak için bazı yeni şeyler var, ama ben henüz çok tanıdık değilim.)

1

'Zaman' ile ne demek istediğini düşünmelisiniz. İki kavram, zaman noktaları ve süreleri vardır. Birbirinden zaman noktaları eklemek veya çıkarmak herhangi bir anlam ifade etmez. Süreleri ekleme ve çıkarma (bir süre ile sonuçlanan) yapmak mantıklıdır ve bir zaman noktasıyla bir süre eklemek ve çıkarmak için mantıklıdır (bir zaman noktasıyla sonuçlanır.

Çoğu zaman API'si harika bir şey yapmaz. iş iki kavramın birbirinden ayırt, ancak standart C++ <chrono> kütüphanesi oldukça iyi. Burada

, bunları birbirine ekler suistimaller C tm türü kullanıcıdan bir kaç süreleri elde etmek için bazı kod ve sonra suistimaller tekrar tm sonucu vermek için

#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

Ben w C++ için yeni bir program olarak bir soruyu soru sorma olarak bazı kod paylaşmak için anted. Bu mükemmel bir kod değil, C++ için yeni birisi için iyi bir uygulamalı olabilir. Zaman damgalarının toplanması ve çıkarılmasına hitap eder. yani sen ... ek doğrulamaları eklemeniz gerekebilir ve günler, saniye ve milisaniye temsil etmek uzatılabilir

#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; 
} 

Çıktı: bunu varmış gibi 27:35

İlgili konular