[C++] Obliczanie wieku z daty urodzenia.
Ostatnio zmodyfikowano 2017-01-11 23:10
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. |
|
pekfos |
» 2017-01-11 22:11:54 Dowolnym sposobem wyodrębnij ostatnie 4 znaki i potem dowolnym sposobem skonwertuj ten fragment na inta. |
|
karambaHZP |
» 2017-01-11 22:14:23 Wrzuć string'a do stringstream a i pobierz trzy wartości liczbowe ze strumienia operatorem >> . |
|
shadow798 Temat założony przez niniejszego użytkownika |
» 2017-01-11 22:39:50 Dzięki za pomoc. |
|
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; }
|
|
« 1 » |