Problem Description
在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。
Input
输入有多个case,每个case有一行,不超过100个字符。
Output
对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。
Sample Input
192.168.100.16
Sample Output
YES
Author
wangye
思路解析:合法的IP应满足以下几个条件:
1、字符仅仅包括0-9和‘.’。
2、有且仅仅有3个‘.’。
3、每格数字最多3位且不超过255;
4、两个‘.’不能连在一起;
5、第一个字符和最后一个字符均不是‘.’;【最后一个字符不判断也能通过,可能是oj测试数据有bug】
6、字符串长度不能超过15位(即每格最多包含三个数字,四格数字12个字符再加三个'.',一共15个字符,如“168.168.168.168”,这就是最长的了)【这一项不判断也能通过,可能是oj测试数据有bug】
代码示例一:利用C++,定义字符串变量求解
#include<bits/stdc++.h> using namespace std; bool ip_jud(string ip) { int len=ip.size(),i,a,j,e; len--; if(ip[0]=='.'||ip[len]=='.'||len>15)//第一个字符和最后一个字符不能是'.',长度不能超过15位 { return 0; } a=j=0,e=1; for(i=len;i>=0;i--) { if(ip[i]=='.') { } else if(ip[i]>='0'&&ip[i]<='9') { } else//不能包含'.'、'0'~'9'之外的其他字符 { return 0; } if(ip[i]=='.'&&ip[i+1]=='.')//两个'.'不能连续 { return 0; } if(ip[i]=='.') { a++; e=1; j=0; } else { j+=(ip[i]-'0')*e; e*=10; //cout<<j<<endl; if(j>255)//数字值不能大于255 { return 0; } } } if(a!=3)//'.'的数量必须是三个 { return 0; } return 1;//若以上没有返回假,则返回真 } int main() { string ip; while(getline(cin,ip))//输入可能有空格 { if(ip_jud(ip)) { cout<<"YES"; } else { cout<<"NO"; } cout<<endl; } }
代码示例二:完全的C语言代码【刚开始写的代码,没有判断第六项和第五项中的最后一个字符,也能通过测试,可能是oj测试数据有bug,若读者发现提交之后错误,可能是oj测试数据进行了修改】
#include<stdio.h> #include<string.h> #include<math.h> int ij(char c[]) { int len,i,f=0,r=1,t,p,f2; len=strlen(c); for(i=0;i<len;i++) { if(c[0]=='.') { r=0; } if(c[i]=='.'&&c[i+1]=='.') { r=0; } if(c[i]=='.') { f++; } if((c[i]>='0'&&c[i]<='9')||c[i]=='.') { } else { r=0; } } if(f==3) { } else { r=0; } p=1; t=0; for(i=len-1;i>=0;i--) { if(c[i]=='.') { t=0; p=1; } else { t=(c[i]-'0')*p+t; p*=10; if(t>255) { r=0; } } //printf("t=%d\n",t); } f2=0; for(i=0;i<len;i++) { if(c[i]=='.') { f2=0; } else { f2++; } if(f2>3) { r=0; } } return r; } int main() { char c[106]; while(gets(c))//输入可能有空格 { if(ij(c)) { printf("YES"); } else { printf("NO"); } putchar(10); } }