HDU2206:IP的计算

老子叫甜甜 提交于 2020-01-01 01:08:14
Problem Description
在网络课程上,我学到了很多有关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
 
 
//这是一道神坑之题!!
//我要冷静!!我要冷静!!不能摔电脑!!
//具体注意事项看代码
 
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
    char data[105];
    int flag,t;
    while(gets(data))
    {
        flag=1;//假设是对的
        for(int i=0;i<strlen(data);i++)//第一步,先找是否有特殊符号
        {
            if((data[i]<'0'||data[i]>'9')&&data[i]!='.')
            flag=0;
        }
        //第二步,看是否有且只有三个'.'
        int cnt=0;
        for(int i=0;i<strlen(data);i++)
        {
            if(data[i]=='.')
            cnt++;
        }
        if(cnt!=3)
        flag=0;
        //第三步,看两个点之间的长度是否是1~3位;
        int num=0,l,k=0;;
        char p[100];
        l=strlen(data);
        data[l]='.';
        data[l+1]='\0';
        t=0;
        int wei=0;
        for(int i=0;i<=strlen(data);i++)
        {
            if(data[i]!='.')
            wei++;
            else if(data[i]=='.'&&data[i-1]!='.')
            {
                if(wei<1||wei>3)
                flag=0;
                wei=0;
            }
        }
        //第四步,看数字是不是1~255
        for(int i=0;i<=strlen(data);i++)
        {
            if(data[i]!='.')
            {
                p[k]=data[i];
                k++;
            }
            else if(data[i-1]!='.'&&i>0)
            {
                p[k]='\0';
                num=atoi(p);
                if(num>255)//if(num<1||num>255)此处是此题神坑位置。。。因为000.3.3.3是正确的。。
                flag=0;
                k=0;
                t++;
            }
        }
        if(t!=4)
        flag=0;
        if(flag==0)
        cout<<"NO"<<endl;
        if(flag==1)
        cout<<"YES"<<endl;

    }
    return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!