题解 | #验证IP地址#

验证IP地址

http://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880

首先将字符串IP中的每一段子串保存在数组vec中,然后判断格式正确与否,分为段数的判断、0的判断、值的判断。

class Solution {
public:
    /**
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    bool is_ipv4(string ip){
        for(auto& c: ip) if(c=='.') c=' ';
        vector<string> vec{};
        string str{};
        stringstream s_stream{ip};
        while(s_stream>>str) vec.push_back(str);
        if(vec.size()!=4) return false;
        for(auto x: vec){
            if(x[0]=='0' && x.size()>1) return false;
            if(stoi(x)>255) return false;
            for(auto c: x) if(!isdigit(c)) return false;
        }
        return true;
    }
    
    bool is_ipv6(string ip){
        for(auto& c: ip) if(c==':') c=' ';
        vector<string> vec{};
        string str{};
        stringstream s_stream{ip};
        while(s_stream>>str) vec.push_back(str);
        if(vec.size()!=8) return false;
        for(auto x: vec){
            char* endptr=nullptr;
            if(strtol(x.data(),&endptr,16)==0 && x.size()>1) return false;
            if(strtol(x.data(),&endptr,16)>0xffff) return false;
        }
        return true;
    }
    
    string solve(string IP) {
        if(is_ipv4(IP)) return "IPv4";
        else if(is_ipv6(IP)) return "IPv6";
        else return "Neither";
    }
};




全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
我见java多妩媚:大外包
点赞 评论 收藏
分享
小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务