题目
描述
写一个算法判断某个字符串是不是一个合法的IP地址。
输入
1 行, 任意长度字符串
输出
1 行, 若字符串为合法 IP 地址,则输出 1,否则输出 0
Example
Input
::0.0.0.0
Output
1
题解
据 IPv6,IPv6 判断
- IPv4
- 点分十进制表示
- 分四段,每段由一个值小于 256 大于等于 0 的数字组成
- IPv6
- 冒分十六进制表示
- 分八段,每段由四位十六进制数字组成
- 可以省略前导 0,若连续 x 段值都为零,则可以用 :: (双冒号)来代替,若同时存在多段连续 0 段,则只能压缩其中一段
1 |
|
调用 Windows 或 Linux API 间接判断
- 通过 IP 地址转换函数函数 int inet_pton(int af, const char *src, void *dst) 进行判断
- af 为地址簇,IPv4 取 AF_INET,IPv6 取 AF_INET6
- src 为 IP 字符数组
- dst 为用来存储转化后的 IP 地址的对象,IPv4 为 in_addr 结构体对象,IPv6 为 in6_addr 结构体对象
- 若返回值为 1 则说明IP合法,0 说明参数 af 指定的地址族或 src 格式不对,<0 说明函数出错
- Windows 和 Linux 系统下的函数名相同,但是实现不同,需要包含不同的头文件
- Windows
1 |
* Linux
1 |
1 |
|