栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 468. 验证IP地址

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 468. 验证IP地址

验证IP地址

给定一个字符串 queryIP(queryIP 仅由英文字母,数字,字符 '.' 和 ':' 组成)。如果是有效的 IPv4 地址,返回 "IPv4" ;如果是有效的 IPv6 地址,返回 "IPv6" ;如果不是上述类型的 IP 地址,返回 "Neither" 。

有效的IPv4地址 是 “x1.x2.x3.x4” 形式的IP地址。 其中 0 < = x i < = 255 0 <= x_i <= 255 0<=xi​<=255 且 x i x_i xi​ 不能包含 前导零。例如: “192.168.1.1” 、 “192.168.1.0” 为有效IPv4地址, “192.168.01.1” 为无效IPv4地址; “192.168.1.00” 、 “192.168@1.1” 为无效IPv4地址。“192.168.1.00” 、 “192.168@1.1” 为无效IPv4地址。

一个有效的IPv6地址 是一个格式为“x1:x2:x3:x4:x5:x6:x7:x8” 的IP地址,其中:

  • 1 < = x i . l e n g t h < = 4 1 <= x_i.length <= 4 1<=xi​.length<=4
  • x i xi xi 是一个 十六进制字符串 ,可以包含数字、小写英文字母( 'a' 到 'f' )和大写英文字母( 'A' 到 'F' )。
  • 在 x i x_i xi​ 中允许前导零。

例如 "2001:0db8:85a3:0000:0000:8a2e:0370:7334" 和"2001:db8:85a3:0:0:8A2E:0370:7334" 是有效的 IPv6 地址,而"2001:0db8:85a3::8A2E:037j:7334" 和"02001:0db8:85a3:0000:0000:8a2e:0370:7334" 是无效的 IPv6 地址。相关标签:字符串。

Validate IP Address
Input: queryIP = "172.16.254.1"
Output: "IPv4"
Explanation: This is a valid IPv4 address, return "IPv4".
Input: queryIP = "2001:0db8:85a3:0:0:8A2E:0370:7334"
Output: "IPv6"
Explanation: This is a valid IPv6 address, return "IPv6".
Input: queryIP = "256.256.256.256"
Output: "Neither"
Explanation: This is neither a IPv4 address nor a IPv6 address.

这题不是很难,虽然代码长一些但是思路上比较简单。题意是给我们一个字符串,然后让我们判断一下这个字符串是不是合法的IPV4或者IPV6或者啥也不是。

class Solution {
public:
    vector split(string ip, char t) {
        vector items;
        for (int i = 0; i < ip.size(); i ++ ) {
            int j = i;
            string item;
            while (ip[j] != t) item += ip[j ++ ];
            i = j;
            items.push_back(item);
        }
        return items;
    }

    string check_ipv4(string ip) {
        auto items = split(ip + '.', '.');
        if (items.size() != 4) return "Neither";
        for (auto item: items) {
            if (item.empty() || item.size() > 3) return "Neither";
            if (item.size() > 1 && item[0] == '0') return "Neither";
            for (auto c: item)
                if (c < '0' || c > '9') return "Neither";
            int t = stoi(item);
            if (t > 255) return "Neither";
        }
        return "IPv4";
    }

    bool check(char c) {
        if (c >= '0' && c <= '9') return true;
        if (c >= 'a' && c <= 'f') return true;
        if (c >= 'A' && c <= 'F') return true;
        return false;
    }

    string check_ipv6(string ip) {
        auto items = split(ip + ':', ':');
        if (items.size() != 8) return "Neither";
        for (auto item: items) {
            if (item.empty() || item.size() > 4) return "Neither";
            for (auto c: item)
                if (!check(c)) return "Neither";
        }
        return "IPv6";
    }

    string validIPAddress(string ip) {
        if (ip.find('.') != -1 && ip.find(':') != -1) return "Neither";
        if (ip.find('.') != -1) return check_ipv4(ip);
        if (ip.find(':') != -1) return check_ipv6(ip);
        return "Neither";
    }
};
func validIPAddress(queryIP string) string {
    if sp := strings.Split(queryIP, "."); len(sp) == 4 {
        for _, s := range sp {
            if len(s) > 1 && s[0] == '0' {
                return "Neither"
            }
            if v, err := strconv.Atoi(s); err != nil || v > 255 {
                return "Neither"
            }
        }
        return "IPv4"
    }
    if sp := strings.Split(queryIP, ":"); len(sp) == 8 {
        for _, s := range sp {
            if len(s) > 4 {
                return "Neither"
            }
            if _, err := strconv.ParseUint(s, 16, 64); err != nil {
                return "Neither"
            }
        }
        return "IPv6"
    }
    return "Neither"
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933978.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号