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; }
分类:
OnlineJudge
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?