题解 | #IP地址#

IP地址

https://www.nowcoder.com/practice/2359e23180194f99828f5cd9c764236a

#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;
}

全部评论

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务