方法:分割字符串比较
1、判断是否为IPv4
首先将字符串分割开,遇到‘ . ’字符就进行分割;
对分割后的字符串进行判断,需要满足以下条件:
(1)分割后的字符串个数为4个;
(2)字符串的每个字符都为数字;
(3)字符串的数字大小处于0-255之间;
(4)字符串的长度大于1时,首个字符不得为0。
1、判断是否为IPv6
首先将字符串分割开,遇到‘ :’字符就进行分割;
对分割后的字符串进行判断,需要满足以下条件:
(1)分割后的字符串个数为8个;
(2)字符串的每个字符都为数字或为a-f,A-F的字母;
(3)字符串的长度不得超过4且大于0。
时间复杂度:o(n)
空间复杂度:o(1)
class Solution {
public:
string solve(string IP) {
if (isIPv4(IP))
return "IPv4";
else if (isIPv6(IP))
return "IPv6";
else
return "Neither";
}
// 判断是否为IPv4
bool isIPv4(string IP) {
vector<string> res;
string temp;
// 将字符串以'.'拆分开四段分别存储进数组
for (int i = 0; i < IP.length(); i++) {
if (IP[i] == '.') {
res.push_back(temp);
temp = "";
} else {
temp += IP[i];
}
// 保证每个分段的字符串为数字
if (!(IP[i] == '.' || (IP[i] >= '0' && IP[i] <= '9')))
return false;
}
res.push_back(temp);
if (res.size() != 4)
return false;
for (int i = 0; i < 4; i++) {
if (!(stoi(res[i]) < 255 && stoi(res[i]) >= 0))
return false;
if (res[i][0] == '0' && res[i].length() != 0)
return false;
}
return true;
}
// 判断是否为IPv6
bool isIPv6(string IP) {
vector<string> res;
string temp;
// 将字符串以':'拆分开8段分别存储进数组
for (int i = 0; i < IP.length(); i++) {
if (IP[i] == ':') {
res.push_back(temp);
temp = "";
} else {
temp += IP[i];
}
// 保证每个分段的字符串为16进制
if (!(IP[i] == ':' || (IP[i] >= '0' && IP[i] <= '9') ||
(IP[i] >= 'a' && IP[i] <= 'f') || (IP[i] >= 'A' && IP[i] <= 'F')))
return false;
}
res.push_back(temp);
if (res.size() != 8)
return false;
for (int i = 0; i < 8; i++) {
if (res[i].length() > 4 || res[i].length() <= 0)
return false;
}
return true;
}
};

京公网安备 11010502036488号