一定要注意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++; } else sum=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; } else sum=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; else cout<<"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" ); else puts( "NO" ); } else puts( "NO" ); } return 0; }
时间: 2024-11-08 17:02:13