IP

简介
IP地址(英语:Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。常见的IP地址,分为IPv4与IPv6两大类。目前还有些ip代理软件,但大部分都收费。(在高中的备战oi时学过的都忘记了这次又遇到一道题正好回顾一下知识)
ip计算
在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。
Input
输入有多个case,每个case有一行,不超过100个字符。
Output
对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。
Sample Input
192.168.100.16
Sample Output
YES
正确的ip:IP地址每个字节范围是0到255,IPv4中规定IP地址长度为32(按TCP/IP参考模型划分) ,即有2^32-1个地址。一般的书写法为4个用小数点分开的十进制数。也有人把4位数字化成一个十进制长整数,但这种标示法并不常见。另一方面,IPv6使用的128位地址所采用的位址记数法,在IPv4也有人用,但使用范围更少。
代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int i, j, k, m, n, l, s, t, x, y;
int main()
{
int flag;
int b[101];
char a[200];
while (scanf(" "), gets(a))
{
for (i = strlen(a) - 1; a[i] == ' '; i--)//去掉后面的空格
a[i] = 0;
flag = 1;
n = strlen(a);
j = 1;
for (i = 0; i <= n - 1; i++)
{
if (a[i] == '.') b[j++] = i;
if (!(a[i] == '.' || a[i] >= '0'&&a[i] <= '9'))
{
flag = 0;
break;
}
}

if (j != 4)
{
cout << "NO\n";
continue;
}
if (flag == 0)
{
cout << "NO\n";
continue;
}
//3个点,并且不能有其他字符
b[0] = -1;
b[4] = n;
for (i = 0; i <= 3; i++)
if (b[i + 1] - b[i] == 1 || b[i + 1] - b[i] > 4)
{
flag = 0;
break;
}
if (flag == 0)
{
cout << "NO\n"; //检查点间距
continue;
}
for (j = 0; j <= 3; j++)
{
x = 0;
for (k = b[j] + 1; k <= b[j + 1] - 1; k++)
{
x *= 10;
x += a[k] - '0';
}
if (x >= 256)
{
flag = 0; //检查数字
break;
}
}
if (flag == 0)
{
cout << "NO\n";
continue;
}
cout << "YES\n";
}
}