IP判断 soj1103

简介:

  IP判断

基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。

合法的IP是这样的形式:

A.B.C.D

其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。

现在,请你来完成这个判断程序吧^_^

Input

输入由多行组成,每行是一个字符串,输入由“End of file”结束。

字符串长度最大为30,且不含空格和不可见字符。

Output

对于每一个输入,单独输出一行

如果该字符串是合法的IP,输出YES,否则,输出NO

Sample Input

202.115.32.24
a.b.c.d

Sample Output

YES
NO
题意很明确:判断给出的字符串是否属于合法的IP。合法的IP必须符合以下几个条件:
1)形如a.b.c.d,有且只能有3个'.';
2)有且只有4个整数,并在[0,255]范围内,不允许有前导0;
3)a,b,c,d只能包含数字;
4)第一个'.'不能在第一个位置,第三个'.'不能在末尾,相邻两个'.'位置之差必须大于1

  

复制代码
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
usingnamespace std;

int judge(char IP[])
{
    int i,j;
    int len;
    int point[3];
    int ip[4];
    memset(point,0,sizeof(point));
    memset(ip,0,sizeof(ip));
    len=strlen(IP);
    if(len<7||len>15) //合法的IP字符串长度必定在[7,15]范围内
    {
        return0;
    }
    else
    {
        for(i=0;i<len;i++) //只能是数字和字符'.'
        {
            if(!(IP[i]>='0'&&IP[i]<='9'||IP[i]=='.'))
            {
                return0;
            }
        }
        j=0;
        for(i=0;i<len;i++) //判断字符'.'的个数,有且只能有3个
        {
            if(IP[i]=='.')
                j++;
        }
        if(j!=3)
        {
            return0;
        }
        j=0;
        for(i=0;i<len;i++)
        {
            if(IP[i]=='.')
                point[j++]=i;
        }
        
        //第一个'.'不能在IP的初始位置,第三个'.'不能在末尾,相邻两个'.'位置之差必须大于1
        if(!(point[0]>0&&point[2]<len-1&&(point[1]-point[0])>1&&(point[2]-point[1])>1)) 
        {
            return0;
        }
        if(point[0]>1) //判断是否存在前导0
        {
            if(IP[0]=='0')
                return0;
        }
        if((point[1]-point[0])>2)
        {
            if(IP[point[0]+1]=='0')
                return0;
        }
        if((point[2]-point[1])>2)
        {
            if(IP[point[1]+1]=='0')
                return0;
        }
        if((len-point[2])>2)
        {
            if(IP[point[2]+1]=='0')
                return0;
        }
        j=0;
        for(i=0;i<len;i++) //求算4个整数的大小
        {
            if(IP[i]!='.')
                ip[j]=ip[j]*10+IP[i]-48;
            else
                j++;
        }
        for(i=0;i<4;i++) //判断数字是否在[0,255]范围内
        {
            if(!(ip[i]>=0&&ip[i]<=255))
            {
                return0;
            }
        }
        return1;
    }
}

int main(void)
{
    char IP[35];
    while(scanf("%s",IP)==1)
    {
        if(judge(IP))
            printf("YES\n");
        else
            printf("NO\n");
    }
    return0;
}
复制代码

 本文转载自海 子博客园博客,原文链接:http://www.cnblogs.com/dolphin0520/archive/2011/04/13/2015194.html如需转载自行联系原作者


相关文章
|
7月前
|
监控 UED Python
代理IP的可用率一般是怎么来判断的
代理IP的可用率关乎用户体验和效率,涉及连通性测试(检查能否成功连接目标网站)、响应时间(衡量性能,短响应时间代表高可用性)、成功率统计(访问成功的比例显示稳定性和可靠性)、错误率分析(高错误率显示问题)、以及稳定性评估(长期性能表现确保服务连续性)。多种指标综合判断代理服务质量。
|
8月前
如何判断代理ip的匿名程度
如何判断代理ip的匿名程度
|
8月前
Ip校验规则:以,分割IP字符串
Ip校验规则:以,分割IP字符串
39 0
4、if双分支根据变量赋值识别用户输入IP地址判断主机连 通性
4、if双分支根据变量赋值识别用户输入IP地址判断主机连 通性
79 0
|
机器学习/深度学习
【串的匹配】IP判断
【串的匹配】IP判断
86 0
|
SQL Oracle 关系型数据库
服务器系统判断及常见端口号
服务器系统判断及常见端口号
154 0
服务器系统判断及常见端口号
多IP情况下如何获取本地的第一个IP及如何调整本地的第一个IP
我分析了业务的代码,OPTIONS中的Via中的用的是采用gethostbyname获取的。这意味着该函数获取的系统的默认的第一个IP。如果操作系统有多个IP,如何设置它们的优先级呢?
多IP情况下如何获取本地的第一个IP及如何调整本地的第一个IP
|
网络协议 Linux 测试技术
怎么正确判断服务器的网络情况(1)
怎么正确判断服务器的网络情况
834 0
怎么正确判断服务器的网络情况(1)
|
数据采集 Web App开发 搜索推荐
如果通过 IP 判断是否是爬虫
如果通过 IP 判断是否是爬虫
364 0
如果通过 IP 判断是否是爬虫