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如需转载自行联系原作者


相关文章
|
负载均衡 网络协议 算法
slb监听协议与端口
SLB是云服务商提供的负载均衡服务,用于分发客户端请求到多台后端服务器,提升服务可用性和响应速度。关键概念包括监听协议(TCP、UDP、HTTP、HTTPS、TCPSSL)和监听端口。监听协议决定了SLB处理请求的方式,而监听端口则是SLB接收请求的入口。配置时需根据应用选择合适协议和端口,并可设置负载均衡算法(如轮询、最少连接等)。客户端应通过SLB统一入口访问后端服务,避免绕过SLB导致的问题。
1626 2
AutoJS4.1.0实战教程 ---百度极速版
AutoJS4.1.0实战教程 ---百度极速版
339 0
|
11月前
|
UED
「Mac畅玩鸿蒙与硬件40」UI互动应用篇17 - 照片墙布局
本篇将带你实现一个简单的照片墙布局应用,通过展示多张图片组成照片墙效果,用户可以点击图片查看其状态变化。
354 67
「Mac畅玩鸿蒙与硬件40」UI互动应用篇17 - 照片墙布局
|
7月前
|
机器学习/深度学习 人工智能 编解码
告别潜在空间的黑箱操作,直接在原始像素空间建模!PixelFlow:港大团队开源像素级文生图模型
香港大学与Adobe联合研发的PixelFlow模型,通过流匹配和多尺度生成技术实现像素级图像生成,在256×256分辨率任务中取得1.98的FID分数,支持端到端训练并突破传统模型对预训练VAE的依赖。
341 36
告别潜在空间的黑箱操作,直接在原始像素空间建模!PixelFlow:港大团队开源像素级文生图模型
|
8月前
|
存储 人工智能 Ubuntu
🤔 Manus值得追捧吗?通过开源方案实测引发的思考
Manus是一款号称能自动完成知识工作的AI助手,近期因其“AI打工人”的形象在中文互联网上引发热议。为验证其实际表现,作者通过开源项目OWL进行测试。结果显示,Manus的核心技术依赖虚拟工作环境、知识库调用、数据源连接等环节,但实际任务执行效果差强人意,耗时较长且未能精准完成简单任务。作者认为,Manus的技术路线主要在于封装工作流(workflow),而这一模式可能随着模型迭代逐渐内化,商业化前景尚不明朗。
364 1
|
前端开发 JavaScript C#
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
297 0
|
11月前
|
敏捷开发 监控 数据可视化
项目仪表盘的妙用:让管理更清晰、更高效、更智能
项目仪表盘是现代项目管理中的重要工具,提供实时数据、多维分析及高度定制的可视化界面,帮助管理者快速决策、优化资源分配、提高团队协作效率和项目可控性。推荐的工具包括板栗看板、Jira、Trello、Asana 和 ClickUp,它们各有特色,适用于不同规模和类型的团队。
457 4
|
前端开发 JavaScript
掌握微前端架构:构建现代Web应用的新方法
本文介绍了微前端架构的概念及其在现代Web应用开发中的优势与实施方法。微前端架构通过将应用拆分成独立模块,提升了开发效率和灵活性。其核心优势包括技术栈灵活性、独立部署、团队协作及易于维护。文章详细阐述了定义边界、选择框架、管理状态和通信等关键步骤,并讨论了状态同步、样式隔离及安全性等挑战。微前端架构有望成为未来Web开发的重要趋势。
|
机器学习/深度学习 设计模式 人工智能
AIGC对设计行业的影响与启发:AIGC设计能替代真正的设计师吗?
AIGC技术正深刻影响设计行业,提升效率、拓宽创意边界,但无法替代设计师的创造力、审美和情感理解。Adobe国际认证成为设计师掌握AIGC技术的起点,推动行业标准化和设计师职业发展。AIGC与设计师的结合将共创设计行业的未来。
|
存储 NoSQL Java
探索Java分布式锁:在高并发环境下的同步访问实现与优化
【6月更文挑战第30天】Java分布式锁在高并发下确保数据一致性,通过Redis的SETNX、ZooKeeper的临时节点、数据库操作等方式实现。优化策略包括锁超时重试、续期、公平性及性能提升,关键在于平衡同步与效率,适应大规模分布式系统的需求。
464 1