MeehoweCK

Untitled

May 30th, 2021
899
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. short liczba_kropek(string adres, unsigned d)
  6. {
  7.     short licznik = 0;
  8.     for(unsigned i = 0; i < d; ++i)
  9.         if(adres[i] == '.')
  10.             ++licznik;
  11.     return licznik;
  12. }
  13.  
  14. unsigned znajdz_kropke(string adres, unsigned d, unsigned od = 0)
  15. {
  16.     for(unsigned i = od; i < d; ++i)
  17.         if(adres[i] == '.')
  18.             return i;
  19. }
  20.  
  21. bool prawidlowa_liczba(string liczba)
  22. {
  23.     short d = liczba.size();
  24.     if(d < 1 || d > 3)
  25.         return false;
  26.     short numer = 0;
  27.     short mnoznik = 1;
  28.     for(short i = d-1; i >= 0; --i)
  29.     {
  30.         if(liczba[i] < '0' || liczba[i] > '9')
  31.             return false;
  32.         numer += mnoznik * (liczba[i] - '0');
  33.         mnoznik *= 10;
  34.     }
  35.     if(numer > 255)
  36.         return false;
  37.     return true;
  38. }
  39.  
  40. bool validate_ip(string adres)
  41. {
  42.     unsigned d = adres.size();
  43.     if(d < 7 || d > 15)
  44.         return false;
  45.     if(liczba_kropek(adres, d) != 3)
  46.         return false;
  47.  
  48.     // sprawdzenie pierwszego członu
  49.     unsigned nr_kropki = znajdz_kropke(adres, d);
  50.     string liczba = adres;
  51.     liczba.erase(nr_kropki, d - nr_kropki);
  52.     if(!prawidlowa_liczba(liczba))
  53.         return false;
  54.  
  55.     // sprawdzenie kolejnych członów
  56.     unsigned poprzednia_kropka;
  57.  
  58.     for(short i = 0; i < 3; ++i)
  59.     {
  60.         poprzednia_kropka = nr_kropki;
  61.         nr_kropki = znajdz_kropke(adres, d, poprzednia_kropka + 1);
  62.         liczba = adres;
  63.         liczba.erase(nr_kropki, d - nr_kropki);
  64.         liczba.erase(0, poprzednia_kropka + 1);
  65.         if(!prawidlowa_liczba(liczba))
  66.             return false;
  67.     }
  68.     return true;
  69. }
  70.  
  71. int main()
  72. {
  73.     cout << "Wpisz adres IP: ";
  74.     string adres;
  75.     cin >> adres;
  76.     if(validate_ip(adres))
  77.         cout << "Adres IP jest poprawny.\n";
  78.     else
  79.         cout << "Adres IP zawiera bledy.\n";
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment