合法ipv6地址怎么判断,如何判断ipv6地址正确

首页 > 实用技巧 > 作者:YD1662023-12-20 05:09:47

合法ipv6地址怎么判断,如何判断ipv6地址正确(1)

1、问题描述

编写一个函数判断一个字符串是IPv4地址还是IPv6地址或者两者都不是。

IPv4地址以十进制格式表示,它由四个十进制数组成,每个数字范围从0到255,以点(“.”)分隔,例如172.16.254.1;

IPv6地址以十六进制格式表示,它由八个四位的十六进制数组成,以冒号(“:”)分隔,例如:

2001:0db8:85a3:0000:0000:8a2e:0370:7334就是合法的 IPv6地址。

同时,我们可以省略一些前导零或者把字母以大写字母表示,所以2001:db8:85a3:0:0:8A2E:0370:7334也是合法的IPv6地址。但是不能完全省略0值,比如2001:0db8:85a3::8A2E:0370:7334就不是合法的IPv6地址。

多余的前导零也是不合法的,比如02001:0db8:85a3:0000:0000:8a2e:0370:7334。

你可以假设输入没有额外的空格和特殊符号。

2、样例说明

样例1: 输入: "172.16.254.1" 输出: "IPv4" 样例解释: 这是一个IPv4地址,返回"IPv4". 样例2: 输入: "2001:0db8:85a3:0:0:8A2E:0370:7334" 输出: "IPv6" 样例解释: 这是一个IPv6地址,返回"IPv6". 样例3: 输入: "256.256.256.256" 输出: "Neither" 样例解释: 这既不是IPv4地址也不是IPv6地址,返回"Neither"

3、解题思路

a.这题是一题字符串处理的题目,题目要求我们判断一个字符串是不是合法的IPv4或IPv6字符串。

我们可以把分别考虑这个字符串是不是IPv4字符串或IPv6字符串。

b.判断一个字符串是不是IPv4字符串比IPv6稍难。

我们从IPv4的特点入手:由4段数字组成,其中有三个'.'符号,每个数字的范围都在0~255之间,且每个数都是合法的数字(没有前导零)。

所以我们可以先把这个字符串用‘.'分隔开,再统计一下'.'的个数,最后判断每个数字是否合法即可。

需要注意的是IPv4字符串的每一个数字不允许存在前导0,但是单个的0是允许的。

c.判断IPv6的思路和IPv4类似,拆分并且判断分隔符的个数,依次检查每个数的正确性。

IPv6的地址不需要判断前导零,但是需要注意大小写都是合法的。

4、参考代码

合法ipv6地址怎么判断,如何判断ipv6地址正确(2)

合法ipv6地址怎么判断,如何判断ipv6地址正确(3)

5、面试官角度

这题主要考察字符串处理和corner case的处理能力,题目的要求需要仔细阅读,每一个细节都需要仔细处理。如果能做到bug free,就能获得较高的评价。

6、lintcode相关题目

有效数字

http://www.lintcode.com/zh-cn/problem/valid-number/

转换字符串到整数

http://www.lintcode.com/zh-cn/problem/string-to-integer-ii/

7、九章参考代码链接

http://www.jiuzhang.com/solution/validate-ip-address/

专业的北美IT求职经验分享,技术交流社区,帮助你找到好的IT工作。

由硅谷顶尖的IT企业工程师授课,提供专业的算法培训/面试咨询。

官网:www.jiuzhang.com

*九章算法。

知乎ID:九章算法。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.