思路
这题没什么技巧也没什么算法,就是处理字符串...
IPv6的错误形式可能有如下:
- 多了
0 - 出现
:: - 字符不在
0-9a-fA-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";
}
}
}; 
京公网安备 11010502036488号