#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { char data[105]; int flag,t; while(gets(data)) { flag=1;//假设是对的 for(int i=0;i<strlen(data);i++)//第一步,先找是否有特殊符号 { if((data[i]<‘0‘||data[i]>‘9‘)&&data[i]!=‘.‘) flag=0; } //第二步,看是否有且只有三个‘.‘ int cnt=0; for(int i=0;i<strlen(data);i++) { if(data[i]==‘.‘) cnt++; } if(cnt!=3) flag=0; //第三步,看两个点之间的长度是否是1~3位; int num=0,l,k=0;; char p[100]; l=strlen(data); data[l]=‘.‘; data[l+1]=‘\0‘; t=0; int wei=0; for(int i=0;i<=strlen(data);i++) { if(data[i]!=‘.‘) wei++; else if(data[i]==‘.‘&&data[i-1]!=‘.‘) { if(wei<1||wei>3) flag=0; wei=0; } } //第四步,看数字是不是1~255 for(int i=0;i<=strlen(data);i++) { if(data[i]!=‘.‘) { p[k]=data[i]; k++; } else if(data[i-1]!=‘.‘&&i>0) { p[k]=‘\0‘; num=atoi(p); if(num>255)//if(num<1||num>255)此处是此题神坑位置。。。因为000.3.3.3是正确的。。 flag=0; k=0; t++; } } if(t!=4) flag=0; if(flag==0) cout<<"NO"<<endl; if(flag==1) cout<<"YES"<<endl; } return 0; }
原文:http://www.cnblogs.com/nefu929831238/p/5329852.html