题解 | #验证IP地址#

验证IP地址

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

#include <cctype>
#include <string>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */

    vector<string> split(string s, char spliter) {
        vector<string> ans;

        int l = 0, r = 0;
        while (r != s.size()) {
            if (s[r] == spliter) {
                ans.push_back(s.substr(l, r - l));
                ++r;
                l = r;
            }
            else {
                ++r;
            }
        }

        ans.push_back(s.substr(l, r - l));
        return ans;
    }

    bool isIPv4(string IP) {
        vector<string> s = split(IP, '.');
        if (s.size() != 4) {
            return false;
        }

        for (int i = 0; i < s.size(); ++i) {
            // 判断位数
            if (s[i].size() == 0 || s[i].size() > 3) {
                return false;
            }
            // 判断前导零
            if (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;
                }
            }

            // 判断数值
            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 (isalpha(s[i][j]) && (tolower(s[i][j]) < 'a' || tolower(s[i][j]) > 'f') ) {
                    return false;
                }
            }
        }

        return true;
    }

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

全部评论

相关推荐

10-09 16:12
门头沟学院 Java
帅宇殿下:佬,简历写的什么
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务