class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
vector<string> split(string s, string spliter)
{
vector<string> res; // 创建一个空的 vector 用来存储分割后的结果
int i; // 定义一个整数 i 用来存储找到的分隔符的位置
while ((i = s.find(spliter)) && i != s.npos) //i为赋值语句 查找分隔符第一次出现的位置
{
res.push_back(s.substr(0, i)); // 将分隔符之前的部分添加到结果向量中
s = s.substr(i + 1); // 更新 s 为分隔符之后的部分
}
res.push_back(s); // 添加最后剩余的部分到结果向量中
return res; // 返回结果向量
}
bool isIPv4 (string IP)
{
vector<string> s = split(IP, ".");
//IPv4必定为4组
if(s.size() != 4)
return false;
for(int i = 0; i < s.size(); i++)
{
//不可缺省,有一个分割为零,说明两个点相连
if (s[i].size() == 0)
return false;
//4个值中若长度<0,>3,其中一个前缀为0.并且整个值>1
if (s[i].size() < 0 || s[i].size() > 3 || (s[i][0]=='0' && s[i].size() != 1))
{
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)
return false;
}
return true;
}
bool isIPv6 (string IP)
{
vector<string> s = split(IP, ":");
//IPv6必定为8组
if(s.size() != 8) return false;
for(int i = 0; i < s.size(); i++){
//每个分割不能缺省,不能超过4位
if(s[i].size() == 0 || s[i].size() > 4) return false;
for(int j = 0; j < s[i].size(); j++){
//不能出现a-fA-F以外的大小写字符
if(!(isdigit(s[i][j]) || (s[i][j] >= 'a' && s[i][j] <= 'f') || (s[i][j] >= 'A' && s[i][j] <= 'F')))
return false;
}
}
return true;
}
string solve(string IP) {
if(IP.size() == 0)
return "Neither";
if(isIPv4(IP))
return "IPv4";
else if(isIPv6(IP))
return "IPv6";
return "Neither";
}
};
刷题——验证IP地址
于 2024-08-11 22:46:58 首次发布