题解 | #验证IP地址#

验证IP地址

http://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880

思路:排除一切不为Neither的情况,剩下的就是符合条件的情况。首先根据字符串是否含有"."和":"分为IPv4和IPv6两种情况,在分别进行甄别。需要注意的是IPv6的字符判定是否在合规区间的逻辑表达。

package main
import "strings"
import "strconv"
/**
 * 验证IP地址
 * @param IP string字符串 一个IP地址字符串
 * @return string字符串
*/
func solve( IP string ) string {
	// write code here
		if strings.Contains(IP, ".") {
		//IP v4
		IPSlice := strings.Split(IP, ".")
		for _, s := range IPSlice {
        //只要有一个为空就不符合
			if s == "" {
				return "Neither"
			}
            //只要有一个不是数字就不符合
			for _, i := range s {
				if i >= '9' || i <= '0' {
					return "Neither"
				}
			}
            //字符串转数字并判断是否大于255
			num, _ := strconv.Atoi(s)
			if num >= 256 {
				return "Neither"
			}
		}
		return "IPv4"
	} else {
		//IP v6
		IPSlice := strings.Split(IP, ":")
		for _, s := range IPSlice {
        //只要有一个为空就不符合
			if s == "" {
				return "Neither"
			}
			for k, i := range s {
            //每个“位”里第一个是数字0,直接下个循环
				if k == 0 && i == '0' {
					continue
				//若第一个是0,第二个还是0,则不符合
				if k == 1 && i == '0' && s[0] == '0' {
					return "Neither"
				}
                //下列三种情况同时满足,表示字符不在合规的区间
				if (i<'0'||i>'9')&&(i<'a'||i>'e')&&(i<'A'||i>'E') {
					return "Neither"
				}
			}
		}
		return "IPv6"
	}
}
全部评论

相关推荐

SinyWu:七院电话面的时候问我有没有女朋友,一听异地说你赶紧分。我:???
点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务