Advertisement
am1x

p1154

Jan 4th, 2022
1,032
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <assert.h>
  4. #include <inttypes.h>
  5. #include <ctype.h>
  6.  
  7.  
  8. static bool is_ip(std::string &s)
  9. {
  10.     size_t sl = s.size();
  11.     assert (sl <= 20);
  12.     size_t cnt = 0;
  13.     for (size_t i = 0; i < sl; i++) {
  14.         char c = s[i];
  15.         if (c == '.') {
  16.             cnt++;
  17.             continue;
  18.         }
  19.         assert (isdigit(c));
  20.         assert (uint32_t(c - '0') < 10);
  21.     }
  22.     assert (cnt == 3);
  23.     s += '.';
  24.     std::string t;
  25.     for (size_t i = 0; i <= sl; i++) {
  26.         char c = s[i];
  27.         if (c != '.') {
  28.             t += c;
  29.             continue;
  30.         }
  31.         size_t tl = t.size();
  32.         if (tl == 0)
  33.             return false;
  34.         unsigned int x = 0;
  35.         for (size_t i = 0; i < tl; i++) {
  36.             unsigned int v = t[i] - '0';
  37.             x = x * 10 + v;
  38.             if (x > 255)
  39.                 return false;
  40.         }
  41.         t.clear();
  42.     }
  43.     return true;
  44. }
  45.  
  46.  
  47. int main()
  48. {
  49.     std::string s;
  50.     std::cin >> s;
  51.     assert (std::cin);
  52.  
  53.     bool ok = is_ip(s);
  54.     std::cout << (ok ? "Good" : "Bad") << std::endl;
  55.     return 0;
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement