中山网站建设 760,国外做科研的网站,wordpress实现文章目录,常用外贸网站验证IP地址_牛客题霸_牛客网 描述
编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址 IPv4 地址由十进制数和点来表示#xff0c;每个地址包含4个十进制数#xff0c;其范围为 0 - 255#xff0c; 用(.)分割。比如#xff0c;172.16.254.1#… 验证IP地址_牛客题霸_牛客网 描述
编写一个函数来验证输入的字符串是否是有效的 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≤n≤505≤n≤50
进阶空间复杂度 O(n)O(n)时间复杂度 O(n)O(n)
示例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 class Solution {
public:vectorstring split(string s, string spliter){vectorstring res;int pos;while((poss.find(spliter)) ! -1){res.push_back(s.substr(0, pos));s s.substr(pos1);}res.push_back(s);return res;}bool isIPv4(string IP){vectorstring s split(IP, .);if(s.size() ! 4)return false;for(int i 0; i 4; i){if(s[i].size()3 || s[i].size()0) // 每一块不能为0不能长度小于等于0或大于3return false;if(s[i][0] 0 s[i].size()!0) // 不能出现第一个以0开头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) // stoi的值为0-255return false;}}return true;}bool isIPv6(string IP){vectorstring 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) // 每组个数不能等于0或大于4个 return false;for(int j 0; j s[i].size(); j) // 如果每个字符不是数字或不是a-f的字母就返回false{if(!(isdigit(s[i][j]) || (s[i][j]a s[i][j]f) || (s[i][j]As[i][j]F)))return false;}}return true;}string solve(string IP) {// write code hereif(isIPv4(IP))return string(IPv4);else if(isIPv6(IP))return string(IPv6);else return string(Neither);}
};