题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
string solve(string IP) {
// write code here
if (is_ipv4(IP)) {
return "IPv4";
}
if (is_ipv6(IP)) {
return "IPv6";
}
return "Neither";
}
private:
bool is_ipv4(const std::string& ip) {
auto res = split(ip, '.');
if (res.size() != 4) {
return false;
}
for (int i = 0; i < res.size(); i++) {
if (res[i].empty()) {
return false;
}
if (res[i][0] == '0') {
return false;
}
for (int k = 0; k < res[i].size(); k++) {
if (!isdigit(res[i][k])) {
return false;
}
}
if (stoi(res[i]) > 255 || stoi(res[i]) < 0) {
return false;
}
}
return true;
}
private:
bool is_ipv6(const std::string& ip) {
auto res = split(ip, ':');
if (res.size() != 8) {
return false;
}
for (int i = 0; i < res.size(); i++) {
if (res[i].empty()) {
return false;
}
if (res[i].size() > 4) {
return false;
}
for (int k = 0; k < res[i].size(); k++) {
if (isdigit(res[i][k]) || res[i][k] >= 'a' && res[i][k] <= 'f' || (res[i][k] >= 'A' && res[i][k] <= 'F')) {
continue;
} else {
return false;
}
}
}
return true;
}
private:
std::vector<std::string> split(const string& str, char delim) {
std::vector<std::string> res;
std::string tmp;
for (int i = 0; i < str.size(); i++) {
if (str[i] != delim) {
tmp.push_back(str[i]);
} else {
res.push_back(tmp);
tmp.clear();
}
}
res.push_back(tmp);
return res;
}
};

查看5道真题和解析