欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

正确的IP地址

程序员文章站 2022-06-03 17:58:40
...

IP

简介
IP地址(英语:Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。常见的IP地址,分为IPv4与IPv6两大类。目前还有些ip代理软件,但大部分都收费。(在高中的备战oi时学过的都忘记了这次又遇到一道题正好回顾一下知识)
题目来源(为IPv4):https://vjudge.net/contest/271643#problem/C
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";
    }
}

相关标签: IP