Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- short liczba_kropek(string adres, unsigned d)
- {
- short licznik = 0;
- for(unsigned i = 0; i < d; ++i)
- if(adres[i] == '.')
- ++licznik;
- return licznik;
- }
- unsigned znajdz_kropke(string adres, unsigned d, unsigned od = 0)
- {
- for(unsigned i = od; i < d; ++i)
- if(adres[i] == '.')
- return i;
- }
- bool prawidlowa_liczba(string liczba)
- {
- short d = liczba.size();
- if(d < 1 || d > 3)
- return false;
- short numer = 0;
- short mnoznik = 1;
- for(short i = d-1; i >= 0; --i)
- {
- if(liczba[i] < '0' || liczba[i] > '9')
- return false;
- numer += mnoznik * (liczba[i] - '0');
- mnoznik *= 10;
- }
- if(numer > 255)
- return false;
- return true;
- }
- bool validate_ip(string adres)
- {
- unsigned d = adres.size();
- if(d < 7 || d > 15)
- return false;
- if(liczba_kropek(adres, d) != 3)
- return false;
- // sprawdzenie pierwszego członu
- unsigned nr_kropki = znajdz_kropke(adres, d);
- string liczba = adres;
- liczba.erase(nr_kropki, d - nr_kropki);
- if(!prawidlowa_liczba(liczba))
- return false;
- // sprawdzenie kolejnych członów
- unsigned poprzednia_kropka;
- for(short i = 0; i < 3; ++i)
- {
- poprzednia_kropka = nr_kropki;
- nr_kropki = znajdz_kropke(adres, d, poprzednia_kropka + 1);
- liczba = adres;
- liczba.erase(nr_kropki, d - nr_kropki);
- liczba.erase(0, poprzednia_kropka + 1);
- if(!prawidlowa_liczba(liczba))
- return false;
- }
- return true;
- }
- int main()
- {
- cout << "Wpisz adres IP: ";
- string adres;
- cin >> adres;
- if(validate_ip(adres))
- cout << "Adres IP jest poprawny.\n";
- else
- cout << "Adres IP zawiera bledy.\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment