HDOJ--2206IP的计算
2012-12-11 18:42
375 查看
最近看了正则表达式,发现用这个来约束IP地址比较方便,只不过可读性不高
IPreg="((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)"
自己本身在学习TCP/IP协议,对网际IP协议有些了解,在HDOJ上找到了关于这方面的题目,于是小练习一下
ps:这题目WA了三次,最后发现原因居然是我用scanf输入的缘故,在用scanf("%s",s)的情况下,我输入0(空格)0(空格) 0(空格) 0,一下输出了四个NO,如果输入IP格式不正确,题目要求只要输出一个NO就够了,显然直接wrong了,这是由于scanf遇到空格将我输入的数据直接分成了四个部分,于是我换了gets(s)来实现输入,这样就不会出现上面的情况了。
IPreg="((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)"
自己本身在学习TCP/IP协议,对网际IP协议有些了解,在HDOJ上找到了关于这方面的题目,于是小练习一下
ps:这题目WA了三次,最后发现原因居然是我用scanf输入的缘故,在用scanf("%s",s)的情况下,我输入0(空格)0(空格) 0(空格) 0,一下输出了四个NO,如果输入IP格式不正确,题目要求只要输出一个NO就够了,显然直接wrong了,这是由于scanf遇到空格将我输入的数据直接分成了四个部分,于是我换了gets(s)来实现输入,这样就不会出现上面的情况了。
/* *判断输入IP地址是否正确 */ #include<iostream> #include<stdio.h> using namespace std; int check(char c) { if(c=='.'||(c>='0' && c<='9')) return 1; else return 0; } int main() { int a[3],b[4];//数组a来记录.的下标,b记录四部分数据 char s[20]; int i,j; int count,lens,flag; while(gets(s)){ lens=strlen(s); count=0,flag=1; j=0; for(i=0;i<lens;i++) { if(check(s[i])==0)//不满足条件 { flag=0; break; } } for(i=0;i<lens;i++) { if(s[i]=='.') { count++;//记录.的个数 a[j++]=i;//记录.在字符串数组里的下标 } } if(count!=3) flag=0;//no else { for(i=1;i<3;i++){ if(a[0]==0 || (a[i]-a[i-1])<=1)//.的位置不合理 flag=0; } b[0]=b[1]=b[2]=b[3]=0; //点分十进制的四部分数据 for(i=0;i<a[0];i++) { b[0]=b[0]*10+s[i]-48; } for(i=a[0]+1;i<a[1];i++) { b[1]=b[1]*10+s[i]-48; } for(i=a[1]+1;i<a[2];i++) { b[2]=b[2]*10+s[i]-48; } for(i=a[2]+1;i<lens;i++) { b[3]=b[3]*10+s[i]-48; } for(i=0;i<4;i++) { if(b[i]<0 || b[i]>255) flag=0; } } if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
相关文章推荐
- hdoj 2206 IP的计算
- hdoj 2206 IP的计算 【基础】
- 杭电ACM HDOJ 2206 IP的计算
- HDOJ2206 IP的计算
- HDOJ 2206:IP的计算 这道题的边界条件可以挑战你的想象力
- 【HDOJ】2206 IP的计算
- hdoj 2206 IP的计算 ~(>_<)~不是一般的水题!!!
- hdoj 2206 IP的计算
- hdoj 2206 IP的计算
- hdoj 2206 IP的计算
- hdoj-2206 IP的计算
- HDOJ 2206 IP的计算(正则表达式的应用)
- HDOJ 2206 IP的计算(正则表达式的应用)
- HDU 2206 IP的计算 WA
- HOJ 2206 IP的计算
- 杭电 2206 IP的计算(坑题)
- HDU 2206 IP的计算
- HDU——2206 IP的计算
- hdu 2206 IP的计算
- IP计算_hdu_2206