我必须编写一个算法来识别点十进制格式的有效IPv4地址。如果IP由四个八位字节组成,则应视为有效,其中0到255(包括)之间的值也为零(例如01.02.03.04)被认为无效。
public static bool is_valid_IP(string IpAddres)
{
string[] adress = IpAddres.Split('.');
if (adress.Length!=4)
{
return false;
}
for (int i = 0; i < 4; i++)
{
int result;
if (adress[i][0]=='0')
{
return false;
}
if (!int.TryParse(adress[i], out result))
{
return false;
}
if (result >255)
{
return false;
}
}
return true;
}
它确实适用于我尝试的所有IP,但我学校的测试(不知道它们是什么)说它错了。有人能指出我做错了吗?
答案 0 :(得分:2)
0.0.0.0
is a valid IP address而the following will reject it。
if (adress[i][0]=='0')
{
return false;
}
答案 1 :(得分:1)
为什么不使用IPAddress类来解析它?
IPAddress address = IPAddress.Parse(ipAddress);
https://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse(v=vs.110).aspx
答案 2 :(得分:0)
我非常确定您的解析器会说双位或单位负ips是有效的。
答案 3 :(得分:0)
你需要检查前导零,如果它存在则返回false,你的测试只检查前0,如果测试是001.002.003.4,它将失败,使用
if (adress.StartsWith("0"))
但排除0.0.0.0
您还需要检查负数,使用TryParse的结果