题解 | #验证IP地址#

验证IP地址

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

#include <string>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return stiring字符串
     */
    vector<string> split(string s, string spliter) {
        vector<string> res;
        int i;
        while ((i = s.find(spliter)) && i != s.npos) {
            res.push_back(s.substr(0, i));
            s = s.substr(i + 1);
        }
        res.push_back(s);
        return res;
    }
    bool isIPv4 (string IP) {
        vector<string> s = split(IP, "."); 
        //IPv4必定为4组
        if(s.size() != 4) 
            return false;
        for(int i = 0; i < s.size(); i++){
            //不可缺省,有一个分割为零,说明两个点相连
            if (s[i].size() == 0) 
                return false;
            //比较数字位数及不为零时不能有前缀零
            if (s[i].size() < 0 || s[i].size() > 3 || (s[i][0]=='0' && s[i].size() != 1)) 
                return false;
            //遍历每个分割字符串,必须为数字
            for (int j = 0; j < s[i].size(); j++) 
                if (!isdigit(s[i][j]))
                    return false;
            //转化为数字比较,0-255之间
            int num = stoi(s[i]); 
            if (num < 0 || num > 255)
                return false;
        }   
        return true;
    }
        bool isIPv6(string IP) {
            vector<string> s = split(IP, ":");
            if (s.size() != 8) return false;
            for (int i = 0; i < s.size(); i++) {
                if (s[i].size() == 0 || s[i].size() > 4)
                    return false;
                for(int j = 0; j < s[i].size(); j++){
                if (!(isdigit(s[i][j]) || (s[i][j] >= 'a' && s[i][j] <= 'f') ||
                        (s[i][j] >= 'A' && s[i][j] <= 'F')))
                    return false;
                }
            }
            return true;
        }

    string solve(string IP) {
        if (IP.size() == 0)
            return "Neither";
        if (isIPv4(IP))
            return "IPv4";
        else if (isIPv6(IP))
            return "IPv6";
        return "Neither";
    }
};

全部评论

相关推荐

04-17 10:16
门头沟学院 Java
不河狸啊:为什么我的是已送达,连已读都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务