题解 | #验证IP地址#
验证IP地址
http://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
import "strings"
/**
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
func solve( IP string ) string {
if isIpv4(IP) {
return "IPv4"
}
if isIpv6(IP) {
return "IPv6"
}
return "Neither"
}
func isIpv4(ip string) bool {
//首先判断字符串是不是大于7(1.1.1.1),首尾不能是 .
if len(ip) < 7 || ip[0] == '.' || ip[len(ip) - 1] == '.' {
return false
}
//分割之后长度不能少于4
strSlice := strings.Split(ip,".")
if len(strSlice) != 4 {
return false
}
for _, str := range strSlice {
k := len(str)
//开头不能是0
// str = []byte(str)
if k == 0 || str[0] == '0' && k > 1 || k > 3 {
return false
}
num := 0
for i:=0;i<len(str);i++{
//必须是数字
c := str[i]
if c < '0' || c > '9' {
return false
}
num = num * 10 + int((c-'0'))
//不能超过255
if num > 255 {
return false
}
}
}
return true
}
func isIpv6(ip string) bool {
//首先判断字符串是不是小于15(1.1.1.1),首尾不能是 .
if len(ip) < 7 || ip[0] == '.' || ip[len(ip) - 1] == '.' {
return false
}
strSlice := strings.Split(ip,":")
if len(strSlice) != 8 {
return false
}
for _, str := range strSlice {
k := len(str)
//开头不能是0
// str = []byte(str)
if k == 0 || k > 4 {
return false
}
for i:=0;i<len(str);i++{
c := string(str[i])
//必须是数字
if !((c <= "f" && c >= "a") || (c <= "F" && c >= "A") || (c >= "0" && c <= "9")) {
return false
}
}
}
return true
}