Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Синтаксический анализатор IP-адреса.
- Проверено на Stepik.org.
- Составил: 13.Драконорог
- */
- #include <iostream>
- #include <string>
- using namespace std;
- int main ()
- {
- string Sample;
- setlocale (LC_ALL,"rus");
- // ВВОД
- getline (cin, Sample);
- // ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА
- try
- {
- if (Sample.empty ()) // если строка пустая
- {
- throw (true);
- }
- int i, Len = Sample.length ();
- // в переменной i останется индекс первого непробельного символа = число пробелов до него!
- for (i = 0; i < Len; i++)
- {
- if (Sample [i] != ' ')
- {
- break;
- }
- }
- if (0 < i) // если в строке есть хотя бы один пробел…
- {
- if (Len == i) // если в строке только пробелы,
- {
- throw (true);
- };
- Sample.erase (0, (size_t)i); // удаляем ведущие пробелы
- Len -= i;
- }
- if (Len < 7) // если в строке менее 7 символов…
- {
- throw (true);
- }
- Sample.push_back ('.'); // добавляем точку в конец строки
- // НАЧАЛО ГЛАВНОГО ЦИКЛА ↓
- for (i = 0; i < 4; ++i)
- {
- size_t nonm;
- if (Sample [0] < '0' || Sample [0] > '9') // первый символ должен быть цифрой!
- {
- throw (true);
- }
- if (255 < stoi (Sample, &nonm)) // IP-адрес начинается с числа, которое не превышает 255!
- {
- throw (true);
- }
- if (Sample [nonm] != '.') // после числа ожидается точка
- {
- throw (true);
- }
- // удаление уже проверенного:
- Sample.erase (0, nonm + 1);
- }
- // КОНЕЦ ГЛАВНОГО ЦИКЛА ↑
- throw (!(Sample.empty ()));
- }
- catch (bool Ex)
- {
- cout << (Ex ? "NO" : "YES"); // ответ на вопрос, является ли введенная строка правильным IP-адресом
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement