Advertisement
-Peer-

Определяет, является ли введённая строка IP-адресом.

Aug 22nd, 2019
589
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.89 KB | None | 0 0
  1. /*
  2. Синтаксический анализатор IP-адреса.
  3. Проверено на Stepik.org.
  4. Составил: 13.Драконорог
  5. */
  6. #include <iostream>
  7. #include <string>
  8.  
  9. using namespace std;
  10.  
  11. int main ()
  12. {
  13.     string Sample;
  14.     setlocale (LC_ALL,"rus");
  15.  
  16. // ВВОД
  17.  
  18.     getline (cin, Sample);
  19.  
  20. // ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА
  21.     try
  22.         {
  23.             if (Sample.empty ())   // если строка пустая
  24.                 {
  25.                     throw (true);
  26.                 }
  27.             int i, Len = Sample.length ();
  28.             // в переменной i останется индекс первого непробельного символа = число пробелов до него!
  29.             for (i = 0; i < Len; i++)
  30.                 {
  31.                     if (Sample [i] != ' ')
  32.                         {
  33.                             break;
  34.                         }
  35.                 }
  36.             if (0 < i) // если в строке есть хотя бы один пробел…
  37.                 {
  38.                     if (Len == i) // если в строке только пробелы,
  39.                         {
  40.                             throw (true);
  41.                         };
  42.                     Sample.erase (0, (size_t)i); // удаляем ведущие пробелы
  43.                     Len -= i;
  44.                 }
  45.             if (Len < 7) // если в строке менее 7 символов…
  46.                 {
  47.                     throw (true);
  48.                 }
  49.             Sample.push_back ('.'); // добавляем точку в конец строки
  50. // НАЧАЛО ГЛАВНОГО ЦИКЛА ↓
  51.             for (i = 0; i < 4; ++i)
  52.                 {
  53.                     size_t nonm;
  54.  
  55.                     if (Sample [0] < '0' || Sample [0] > '9') // первый символ должен быть цифрой!
  56.                         {
  57.                             throw (true);
  58.                         }
  59.                     if (255 < stoi (Sample, &nonm)) // IP-адрес начинается с числа, которое не превышает 255!
  60.                         {
  61.                             throw (true);
  62.                         }
  63.                     if (Sample [nonm] != '.') // после числа ожидается точка
  64.                         {
  65.                             throw (true);
  66.                         }
  67. // удаление уже проверенного:
  68.                     Sample.erase (0, nonm + 1);
  69.                 }
  70. // КОНЕЦ ГЛАВНОГО ЦИКЛА ↑
  71.             throw (!(Sample.empty ()));
  72.         }
  73.     catch (bool Ex)
  74.         {
  75.             cout << (Ex ? "NO" : "YES"); // ответ на вопрос, является ли введенная строка правильным IP-адресом
  76.         }
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement