题解 | #验证IP地址#

验证IP地址

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

#include <cctype>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    // 将字符串从.或者:分割开
    vector<string> split(string s,string spliter) {
        vector<string> res;
        int i;
        while((i = s.find(spliter)) && i!=s.npos) {
            // 将分割的部分加入vector中
            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;
            // 比较数字位数及不为零时不能有前缀0
            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, ":");
        // IPv6 必定为8组
        if(s.size() != 8) return false;
        for(int i=0;i<s.size();i++) {
            // 每个分割不能缺省,不能超过4位
            if(s[i].size() == 0 || s[i].size() > 4) return false;
            for(int j=0;j<s[i].size();j++) {
                // 不能出现 a-f A-F 以外的大小写字符
                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) {
        // write code here
        if(IP.size() == 0) return "Neither";
        if(isIPv4(IP)) return "IPv4";
        else if(isIPv6(IP)) return "IPv6";
        return "Neither";
    }
};

全部评论

相关推荐

10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务