跳转至

468.验证 IP 地址 (Medium)*

题目描述*

思路 & 代码*

ipv4 的规则很简单,v6 的地址这里为了简单禁止了 :: 的格式。先实现一个 split 函数,根据 .: 对字符串分割后判断。

class Solution {
public:
    string validIPAddress(string IP) {
        if(isValidIPv4(IP)) {
            return "IPv4";
        }else if(isValidIPv6(IP)) {
            return "IPv6";
        }
        return "Neither";
    }
    vector<string> split(const string& s, const char delim = ' ') {
        string tmp;
        stringstream ss(s);
        vector<string> res;
        while(getline(ss, tmp, delim)) {
            res.push_back(tmp);
        }
        if(!s.empty() && s.back() == delim) {
            res.push_back("");
        }
        return res;
    }
    bool isValidIPv4(string ip) {
        auto splited = split(ip, '.');
        if(splited.size() != 4) {
            return false;
        }
        for(auto& s : splited) {
            if(s == "" || s.length() > 1 && s[0] == '0' || s.length() > 3) {
                return false;
            }
            for(auto& c : s) {
                if(c > '9' || c < '0') {
                    return false;
                }
            }
            int num = stoi(s);
            if(num < 0 || num > 255) {
                return false;
            }
        }
        return true;
    }
    bool isValidIPv6(string ip) {
        auto splited = split(ip, ':');
        if(splited.size() != 8) {
            return false;
        }
        for(auto& s : splited) {
            if(s == "" || s.size() > 4) {
                return false;
            }
            for(auto& c : s) {
                if(!(c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F')) {
                    return false;
                }
            }
        }
        return true;
    }
};

最后更新: July 23, 2022