hdu 2206 IP的计算

来源:互联网 发布:mac如何共享桌面文件 编辑:程序博客网 时间:2024/05/23 18:49

IP的计算

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7806    Accepted Submission(s): 1519


Problem Description
在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。
 

Input
输入有多个case,每个case有一行,不超过100个字符。
 

Output
对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。
 

Sample Input
192.168.100.16
 

Sample Output
YES
 题目大意: 求一个ip地址是否合法 难点: 注意各种情况 关键点:必须有4个数字,数字在0到255之内,小数点必须3 个不能连着 ,数字也不能4位 解题时间:2014,08,14 解题思路: 用字符串 ,但是开始的时候第一个for循环用的是i< strlen(s),死活过不  了,,看了大神的才改了,不知道为毛,求指导,还有一种叫做正则公式的,好像很方便
看解法2体会:真是各种注意啊,,细节决定成败啊,
**********************/
#include<stdio.h>//#include<string.h>int check(char s){if(s>='0'&&s<='9') return 1;if(s=='.') return 2;else return 0;}int main(){char s[110];int i,t,a,geshu,c,dot;while(gets(s)){a=c=dot=geshu=0;for(i=0;s[i];i++){//i<strlen(s)就不行  t=check(s[i]); if(!t) break;  if(t==1){dot=0;a=a*10+s[i]-'0';geshu++;if(geshu>3||a>255){t=0;break;} } else{a=geshu=0;dot++;c++;if(dot>1||c>3){t=0;break;} }}if(dot||c!=3) t=0;//防止192.100.12这种情况 if(t) printf("YES\n");else printf("NO\n");}return 0;}
解法2://正则公式的应用
#include<stdio.h>int main(){char str[102],temp[102],a[4],b[4],c[4],d[4];while(gets(str)){temp[0]='\0';if(sscanf(str,"%3[0-9].%3[0-9].%3[0-9].%3[0-9]%s",a,b,c,d,temp)==4&&!temp[0])//正则公式 {int e,f,i,j;sscanf(str,"%d.%d.%d.%d",&e,&f,&i,&j);if(e<256&&f<256&&i<256&&j<256)printf("YES\n");elseprintf("NO\n");}elseprintf("NO\n");}return 0;}


0 0
原创粉丝点击