#include <iostream> #include <string> using namespace std; // test data: // 0.0.0.0 // 127.0.0.1 // 666.666.666.666 // 256.0.0.1 // 1.256.0.1 // -1.888.666.233 // 123456.666666.11.11 // 000.000.000.000 // abc.12.55.66 // 123.11.1 int stringToInt(string in){ int res=0,power=1; for(long long unsigned int i=0;i<in.size();i++){ res+=(in[in.size()-1-i]-'0')*power; power*=10; } return res; } bool judge(string input){ string part[4]; for(int i=0;i<3;i++){ // 按 . 分割,不足3个和大于3个都false int pos=input.find('.'); if(pos==string::npos||pos>3) return false; // 每个字段位数>3 超出 或 不足4个字段 part[i]=input.substr(0,pos); input = input.substr(pos+1); // cout<<part[i]<<endl; // cout<<part[i].size()<<endl; } part[3]=input; // cout<<part[3]<<endl; if(input.find('.')!=string::npos) return false; // 字段数目超出 for(int i=0;i<4;i++){ // 校验值0~255 for(long long unsigned int k=0;k<part[i].size();k++){ // 检验是否是数字构成 if(part[i][k]>='0'&&part[i][k]<='9') continue; else return false; } int partNum=stringToInt(part[i]); if(partNum>=0&&partNum<=255) continue; else return false; } return true; } int main(){ string input; while(cin>>input){ if(judge(input)) cout<<"Yes!"<<endl; else cout<<"No!"<<endl; } return 0; }