分析:首先我们要知道IP地址(IPV4)的条件:
(除去特殊的主机和广播地址)
1、IP地址只有三个 ’ . ',如果不是三个点,就不是IP地址
2、例如:A.B.C.D
A不能为0,且每一位都不能大于255
3、所以要用一个函数单独对 **’ . '**进行判断
4、特别说明一下isdigit函数,主要用于检查其参数是否为十进制数字字符,C语言中要加上头文件
代码如下:
//如何判断合法的IP地址, 尽可能考虑各种情况(面试题)
//判断IPV4的地址是否合法的程序
#include
#include
static int PointNum(const char* str)
{
int count = 0;
if (str == NULL)
{
return 0;
}
while (*str != '\0')
{
if (*str == '.')
{
count++;
}
str++;
}
return count;
}
bool IsIP(char* str)
{
int num = 0;
if (str == NULL || str[0] == '0')//IP地址起始不能为0
{
return false;
}
if (PointNum(str) != 3)//IP地址只有3个'.'
{
return false;
}
while (*str != '\0')
{
if (isdigit(*str))
{
num = num * 10 + (*str) - '0';
}
else if (*str != '.' || num > 255)
{
return false;
}
else
{
num = 0;
}
str++;
}
if (num > 255)//最后一个数据不在进循环,所以最终处理尾部数据
return false;
return true;
}
int main()
{
char *str[] = { "192.188.1.2", "256.3.4.1", "0.1.2.3", "123.256.3.4", "198.164.23.259" };
for (int i = 0; i < sizeof(str) / sizeof(str[0]); i++)
{
if (IsIP(str[i]))
{
printf("%s 是合法的IP\n", str[i]);
}
else
{
printf("%s 不是合法的IP\n", str[i]);
}
}
return 0;
}