集合划分问题 Golang 动态规划 01背包
最长等差数列问题 Golang 暴力法
字母组合 Golangweb
正则表达式解比我这个更好。正则表达式
package main import ( "fmt" "strconv" "strings" ) func main() { s:="" fmt.Scan(&s) //含.多是ipv4 if strings.Contains(s,"."){//ipv4 if strings.Contains(s,".."){ fmt.Println("Neither") return } nums:=strings.Split(s,".") for _,num:=range nums{ //不是0,可是以0开头 if string(num[0])=="0"&&num!="0"{ fmt.Println("Neither") return } //解析为整数 n,err:=strconv.Atoi(num) //没法解析的非法值 if err!=nil{ fmt.Println("Neither") return } //范围限制 if n<0||n>255{ fmt.Println("Neither") return } } fmt.Println("IPv4") //含:多是ipv4 }else if strings.Contains(s,":"){//ipv6 if strings.Contains(s,"::"){ fmt.Println("Neither") return } nums:=strings.Split(s,":") for _,num:=range nums{ //以00开头 if string(num[0])=="0"&& len(num)>1 &&string(num[1])=="0"{ fmt.Println("Neither") return } //解析为16进制整数 n,err:=strconv.ParseInt(num,16,64) //没法解析的非法值 if err!=nil{ fmt.Println("Neither") return } //范围限制 if n<0||n>16*16*16*16-1{ fmt.Println("Neither") return } } fmt.Println("IPv6") }else{ fmt.Println("Neither") } }