HDU ACM 2206 IP的计算

一定要注意IP的长度不能超过15位。

方法一:

#include<iostream> using namespace std;bool f(char* p){int state,sum;state=sum=0;while(true){switch(state){case 0:case 1:case 2:if(*p==NULL) return false;if(*p<='9' && *p>='0' || *p=='.'){if(*p=='.'){if(sum<0 || sum>255) return false;sum=0;state++;}elsesum=sum*10+(*p-'0');p++;}else return false;break;case 3:if(*p<='9' && *p>='0' || *p=='.' || *p==NULL){if(*p==NULL && *(p-1)=='.')return false;else if(*p==NULL){if(sum<0 || sum>255) return false;return true;}elsesum=sum*10+(*p-'0');p++;}else return false;}}return false;} int main() {char a[101];while(gets(a)){if(f(a)&& strlen(a)<=15)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0; }方法二:利用sscanf判断,,这种方法很简单。

#include<iostream> using namespace std;bool r(int x){return x>=0&& x<=255?1:0;}int main(){char ip[101];while(gets(ip)){int a,b,c,d;char tail;if(sscanf(ip, "%d.%d.%d.%d%c", &a, &b, &c, &d, &tail) == 4 &&!strchr(ip, '+') && strlen(ip)<=15){if( r(a)&& r(b)&& r(c)&& r(d) )puts( "YES" );elseputs( "NO" );}elseputs( "NO" );}return 0;}

有多少和我一样,坐在不足平米的空间里,

HDU ACM 2206 IP的计算

相关文章:

你感兴趣的文章:

标签云: