Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Obliczanie wieku z daty urodzenia.

Ostatnio zmodyfikowano 2017-01-11 23:10
Autor Wiadomość
shadow798
Temat założony przez niniejszego użytkownika
[C++] Obliczanie wieku z daty urodzenia.
» 2017-01-11 21:48:27
Witam, mam pewien problem. Otóż piszę pewien projekt na studia, w którym chcę dołączyć opcję automatycznego obliczania wieku. Datę urodzenia podaję się w formacie dd/mm/rrrr i jest to typ string. Da się jakoś wyodrębnić z tego sam rok bym mógł od aktualnego roku odjąć ten wpisany? Wiem, że mógłbym zmienić typ na int i zażądać oddzielnego wpisanie dnia miesiąca i roku, jednak zastanawia mnie czy da się jakoś zrobić to inaczej.
P-156340
pekfos
» 2017-01-11 22:11:54
Dowolnym sposobem wyodrębnij ostatnie 4 znaki i potem dowolnym sposobem skonwertuj ten fragment na inta.
P-156341
karambaHZP
» 2017-01-11 22:14:23
Wrzuć string'a do
stringstream
a i pobierz trzy wartości liczbowe ze strumienia operatorem
>>
.
P-156342
shadow798
Temat założony przez niniejszego użytkownika
» 2017-01-11 22:39:50
Dzięki za pomoc.
P-156343
mokrowski
» 2017-01-11 23:10:02

#include <iostream>
#include <tuple>
#include <string>
#include <regex>

using myDate_t = std::tuple<unsigned, unsigned, unsigned>;

myDate_t getDate() {
    std::string line;
    unsigned day;
    unsigned month;
    unsigned year;
    std::regex pattern{R"!(^ *([0-2]\d|3[01])/(0\d|1[0-2])/(\d{4}) *$)!"};
    std::smatch match;
    while(true) {
        std::cout << "Podaj datę w postaci dd/mm/rrrr (dd - dzień, mm - miesiąc, rrrr - rok): ";
        std::cin >> line;
        std::regex_match(line, match, pattern);
        if(4 != match.size()) {
            std::cerr << "Podano nieprawidłową datę. Spróbuj jeszcze raz.\n";
            continue;
        }
        day = std::stoul(match[1]);
        month = std::stoul(match[2]);
        year = std::stoul(match[3]);
        // XXX: Tu jeszcze można sprawdzić czy jest ro rok przestępny i dopuszczalny 29 luty.
        break;
    }

    return std::make_tuple(day, month, year);
}

int main() {
    using namespace std;
    auto date = getDate();
    cout << "Podałeś następującą datę:\n"
        << "dzień = " << get<0>(date) << '\n'
        << "miesiąc =  " << get<1>(date) << '\n'
        << "rok = " << get<2>(date) << endl;
}
P-156346
« 1 »
  Strona 1 z 1