c++ 验证ip地址
验证IP地址
http://www.nowcoder.com/questionTerminal/55fb3c68d08d46119f76ae2df7566880
思路
这题没什么技巧也没什么算法,就是处理字符串...
IPv6的错误形式可能有如下:
- 多了
0
- 出现
::
- 字符不在
0-9
a-f
A-F
之间
IPv4错误形式可能有如下:
- 多了首位'0'
- 超过
0-255
范围 - 出现的
..
别的暂时没想到,有遗漏欢迎补充
class Solution { public: bool type(string &s) { for(auto ch : s){ if(ch == '.') return false; if(ch == ':') return true; } } bool checkv6(string &s) { int ch_cnt = 0; for(int i = 0; i < s.size(); ++i) { if(s[i] == ':') { if(ch_cnt > 4 || ch_cnt == 0) return false; ch_cnt = 0; } else if(!( s[i] <= '9' && s[i] >= '0' || s[i] <= 'f' && s[i] >= 'a' || s[i] <= 'F' && s[i] >= 'A' )) { return false; } else { ch_cnt++; } } return true; } bool checkv4(string &s) { int k = 0; // 记录每个segment起始位置 s.push_back('.'); // 方便atoi使用 for(int i = 0; i < s.size(); ++i) { if(s[i] == '.') { s[i] = '\0'; // 方便atoi使用 if(s[k] == '\0'|| (s[k] == '0' && atoi(&s[k]) != 0) || !(atoi(&s[k]) <= 255 && atoi(&s[k])>= 0)) { return false; } k = i + 1; } } return true; } string solve(string IP) { // write code here if(type(IP)) { if(!checkv6(IP)) return "Neither"; return "IPv6"; } else { if(!checkv4(IP)) return "Neither"; return "IPv4"; } } };