解题思路:
- 按
*
切割为数组,其长度不等于4
,不是IPV4
- 某个元素
+
开头,不是IPV4
- 某个元素
0
开头却长度大于1
,不是IPV4
以下代码中多次用到match
,是为了清晰地表示以上判断。
use std::io::{self, *};
fn main() {
let stdin = io::stdin();
for line in stdin.lock().lines() {
let ll = line.unwrap();
let v = ll.trim().split(".").collect::<Vec<&str>>();
let mut is_ipv_4 = true;
match v.len() {
0..=3 | 5..=usize::MAX => is_ipv_4 = false,
_ => {
for &i in v.iter() {
is_ipv_4 = match i.get(0..1) {
Some("0") => match i.len() {
2..=usize::MAX => false,
_ => true,
},
Some("+") => false,
_ => {
let e = i.trim().parse::<u32>().unwrap_or(256);
match e {
0..=255 => true,
_ => false,
}
}
};
if !is_ipv_4 {
break;
}
}
}
}
match is_ipv_4 {
true => println!("YES"),
false => println!("NO"),
}
}
}