首页 > 试题广场 >

验证IP地址

[编程题]验证IP地址
  • 热度指数:107366 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址

IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;
同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如,  2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。

然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (::) 的情况。 比如, 2001:0db8:85a3::8A2E:0370:7334 是无效的 IPv6 地址。
同时,在 IPv6 地址中,多余的 0 也是不被允许的。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是无效的。

说明: 你可以认为给定的字符串里没有空格或者其他特殊字符。

数据范围:字符串长度满足 5 \leq n \leq 50
进阶:空间复杂度 ,时间复杂度
示例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 地址 

备注:
ip地址的类型,可能为
IPv4,   IPv6,   Neither
头像 牛客题解官
发表于 2022-04-22 12:58:14
精华题解 题目主要信息: IPv4只有十进制数和分割点,其中数字在0-255之间,共4组,且不能有零开头的非零数,不能缺省 IPv6由8组16进制数组成,会出现a-fA-F,通过冒号分割,不可缺省,可以零开头,或者为一个单独零,每组最多4位。 举一反三: 学会了本题的思路,你将可以解决类似的字符串问题: 展开全文
头像 下一次什么时候可以修改昵称
发表于 2020-11-10 15:31:57
算法 1.分别验证IPv4和IPv6 2.注意事项 2.1 分割字符串时,使用limit = -1的split函数,使得字符串末尾或开头有一个'.'或':'也能分割出空的字符串 2.2 使用Integer.parseInt()函数检查异常 public String validIPAddr 展开全文
头像 Arktische
发表于 2020-11-18 22:36:23
思路 这题没什么技巧也没什么算法,就是处理字符串...IPv6的错误形式可能有如下: 多了0 出现:: 字符不在0-9 a-f A-F之间 IPv4错误形式可能有如下: 多了首位'0' 超过0-255范围 出现的.. 别的暂时没想到,有遗漏欢迎补充 class Solution { pub 展开全文
头像 旭赜
发表于 2022-02-28 13:43:38
前面的大哥写得挺好的,就是漏了点 像1.1.1. 3eGF之类的 我给大哥补上 # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 验证IP地址 # @param IP string字符串 一个IP地址字符串 # @return string字符串 # clas 展开全文
头像 小洋芋热爱NLP
发表于 2021-08-19 22:46:42
- 题目描述:- 题目链接:https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880?tpId=188&&tqId=38628&rp=1&ru=/activity/oj&qru=/ta 展开全文
头像 zd330
发表于 2021-10-25 18:25:27
# # 验证IP地址 # @param IP string字符串 一个IP地址字符串 # @return string字符串 # class Solution: def solve(self , IP ): # write code here if '.' i 展开全文
头像 cellspace
发表于 2021-07-06 01:02:54
判断IPv4和IPv6的思路很相似,中间细节有稍许区别。另外这里的测试用例不全,有些情判断不到,比如'192.168.0.1.',这中最后有多余字符的情况。 class Solution { public: /** * 验证IP地址 * @param IP string字 展开全文
头像 某知名患者
发表于 2022-04-21 13:35:15
/** * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ function solve(IP) { // write code here const arr4 = IP.split("."); cons 展开全文
头像 焦糖不丁
发表于 2022-06-05 21:20:37
字符串遍历法 在编写代码之前,我们首先要罗列出IPv4和IPv6各自的规则: IPv4 由十进制数组成。 每个数的开头不能为0,不能超过255。 每个数用.分割 IPv6 由十六进制数组成,不区分大小写。 每个数的长度大于0,小于5。 每个数可以由0开头,并且4个0可以合并为一个0。 每个数用 展开全文
头像 xqxls
发表于 2021-12-20 17:39:07
题意整理 编写一个函数来验证输入的字符串是否是有效的IPv4或IPv6地址。 IPv4地址由4个十进制数表示,它们之间用"."隔开,每个数的范围在0-255。并且非0整数,不能以0开头。 IPv6地址由8组16进制的数字来表示,每组表示16比特。这些组数字通过":"隔开。不能存在某一组为空,或者等 展开全文
头像 你说夕阳很美
发表于 2021-10-26 16:12:00
/** * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ function solve( IP ) { // write code here const arr4 = IP.split(".") 展开全文