Wyrażenie Regularne, Lata Prze.

0

Polecenie to przy użyciu wyr.reg. napisać program który sprawdza czy dany rok od 1584 bez górnego limitu, jest przestępny.
Co jest źle w moim kodzie, że spr. nie przyjmuje i samo wyrażenie nie chce zwrócić prawdy dla roku:np. 900404
.hpp

#pragma once
#include <boost/regex.hpp>
#include <string>

class LeapYearChecker
{
    public:
        LeapYearChecker();
        bool match(std::string string_to_be_checked);

    private:
        boost::regex regular_expression_;
};

.cpp

#include "leap_year_checker.hpp"

LeapYearChecker::LeapYearChecker()
{
    regular_expression_ = boost::regex("^(15(8[48]|9[26]))|((1[6-9]|[2-9]\\d)(0[48]|[13579][26]|[2468][048]))|(([2468][048]|16|3579[26])00)|([1-9]\\d*(([02468][048]|[13579][26])00|\\d\\d(0[48]|[13579][26]|[2468][048])))$");
}

bool LeapYearChecker::match(std::string string_to_be_checked);
{
    return boost::regex_match(string_to_be_checked,regular_expression_);
}
0

łatwiej od nowa napisać wyrażenie niż debugować istniejące

^\d*((([02468][048]|[13579][26])00)|\d\d(?!00)([02468][048]|[13579][26]))$
0

np. 109400 nie zadziała

0

dla 1580 i 01584 powinien odrzucić a akceptuje

0

po kolei
#wszystkie lata podzielne przez 400 są zawsze przestępne:

\d*([02468][048]|[13579][26])00

#lata podzielne przez 4 są przestępne pod warunkiem, że nie są podzielne przez 100

\d+\d([2468][048]|0[48]|[13579][26])

połączyć to do kupy i gotowe:

\d*(([02468][048]|[13579][26])00|\d{2}([2468][048]|0[48]|[13579][26]))

Jeśli się ktoś upiera przy ograniczeniu od dołu 1584:

1584|1588|1592|1596|1600|1[6789](0[48]|[2468][48]|[13579][26])|(([2468][048]|[3579][26])00|[2-9]\d([2468][048]|0[48]|[13579][26]))|\d*[1-9](([02468][048]|[13579][26])00|\d{2}([2468][048]|0[48]|[13579][26]))
0

Nie lepiej przechowywac date w incie i sprawdzic to 1 mala funkcja?

bool isLeapYear(int year)
{
    return ((year%4 == 0 && year%100 != 0) || year%400 == 0);
}
0

Polecenie to przy użyciu wyr.reg. napisać program który sprawdza czy dany rok od 1584 bez górnego limitu, jest przestępny.

Ło w mordę! MacGyver!
Ciekawe jakie będzie kolejne polecenie...

0

-1584
01584

Kurcze no a teraz te akceptuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1