【C语言】LeetCode 468. Validate IP Address
2017-01-06 13:58
337 查看
题目:
Write a function to check whether an input string is a valid IPv4 address or IPv6 address or neither.IPv4 addresses are canonically represented in dot-decimal notation, which consists of four decimal numbers, each ranging from 0 to 255, separated by dots ("."), e.g.,
172.16.254.1;
Besides, leading zeros in the IPv4 is invalid. For example, the address
172.16.254.01is
invalid.
IPv6 addresses are represented as eight groups of four hexadecimal digits, each group representing 16 bits. The groups are separated by colons (":"). For example, the address
2001:0db8:85a3:0000:0000:8a2e:0370:7334is
a valid one. Also, we could omit some leading zeros among four hexadecimal digits and some low-case characters in the address to upper-case ones, so
2001:db8:85a3:0:0:8A2E:0370:7334is
also a valid IPv6 address(Omit leading zeros and using upper cases).
However, we don't replace a consecutive group of zero value with a single empty group using two consecutive colons (::) to pursue simplicity. For example,
2001:0db8:85a3::8A2E:0370:7334is
an invalid IPv6 address.
Besides, extra leading zeros in the IPv6 is also invalid. For example, the address
02001:0db8:85a3:0000:0000:8a2e:0370:7334is
invalid.
Note: You may assume there is no extra space or special characters in the input string.
Example 1:
Input: "172.16.254.1" Output: "IPv4" Explanation: This is a valid IPv4 address, return "IPv4".
Example 2:
Input: "2001:0db8:85a3:0:0:8A2E:0370:7334" Output: "IPv6" Explanation: This is a valid IPv6 address, return "IPv6".
Example 3:
Input: "256.256.256.256" Output: "Neither" Explanation: This is neither a IPv4 address nor a IPv6 address.
解答:
char* validIPAddress(char* IP) {int flagipv4 = 0;
int flagipv6 = 0;
char* begin = IP;
int sum = 0;
int lenipv4 = 0;
int lenipv6 = 0;
while (*IP||*(IP-1))
{
if (*IP == '.' || (*IP == '\0'&&*(begin - 1) == '.'))
{
int len = IP - begin;
sum = 0;
if (*begin == '0'&&len>1)
return "Neither";
for (int i = 0; i<len; i++)
{
if(!isalnum(*(begin+i))) return "Neither";
sum = sum * 10 + *(begin + i)-'0';
}
if (sum>255||len<=0||len>3)
return "Neither";
begin = (*IP == '\0') ? begin : IP + 1;
lenipv4++;
}
else if (*IP == ':' || (*IP == '\0'&&*(begin - 1) == ':'))
{
int len = IP - begin;
if (len>4||len<=0)
return "Neither";
for (int i = 0; i<len; i++)
{
if (!((*(begin + i) >= '0'&&*(begin + i) <= '9') || (*(begin + i) >= 'a'&&*(begin + i) <= 'f') || (*(begin + i) >= 'A'&&*(begin + i) <= 'F')))
return "Neither";
}
begin = (*IP == '\0') ? begin : IP + 1;
lenipv6++;
}
if(*IP=='\0') break;
IP++;
}
if (lenipv4 == 4 && lenipv6 == 0)
return "IPv4";
else if (lenipv6 == 8 && lenipv4 == 0)
return "IPv6";
else
return "Neither";
}
相关文章推荐
- LeetCode 468. Validate IP Address
- 【Leetcode】468. Validate IP Address
- LeetCode 468. Validate IP Address
- Leetcode——468. Validate IP Address
- leetcode 468. Validate IP Address 有效的IP检查 IPV4和IPV6地址的检查和区分
- Leetcode-468. Validate IP Address
- [Leetcode] 468. Validate IP Address 解题报告
- leetcode 468. Validate IP Address
- Leetcode 468. Validate IP Address 验证IP地址 解题报告
- leetcode:468. Validate IP Address
- [leetcode]Valid Sudoku(判断有效数独 C语言实现)
- [leetcode]Maximum Depth of Binary Tree (求二叉树的最大深度 C语言)
- [leetcode]Climbing Stairs(爬楼梯 C语言)
- [leetcode](Gray Code 格雷码 C语言实现)
- [leetcode-111]Minimum Depth of Binary Tree(C语言)
- [leetcode]Symmetric Tree (对称树 C语言实现)
- [leetcode-73]Set Matrix Zeroes(C语言)
- [leetcode]Length of Last Word (求最后一个单词的长度 C语言实现)
- [leetcode]Construct Binary Tree from Preorder and Inorder Traversal(根据前序、中序遍历确定一棵二叉树 C语言)
- [leetcode]Reverse Linked List II (反转链表值 C语言实现)