如何比较数字分组并返回最大的数字?

fn solve(s: &str) -> u32 {
    s.split(char::is_alphabetic)
        .map(|num| num.parse::<u32>().unwrap())
        .max()
        .unwrap()
}

fn main() {
    assert_eq!(solve("gh12cdy695m1"), 695);
}

我不明白为什么我收到这个错误:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ParseIntError { kind: Empty }', src/main.rs:3:39
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

回答

split即使它们之间没有任何内容,也会在每个字母字符之间产生字符串:

fn main() {
    let s = String::from("gh12cdy695m1");
    for num in s.split(char::is_alphabetic) {
        println!("{:?}", num);
    }
}
fn main() {
    let s = String::from("gh12cdy695m1");
    for num in s.split(char::is_alphabetic) {
        println!("{:?}", num);
    }
}

在尝试解析它们之前,您应该过滤掉这些空字符串:

fn solve(s: &str) -> u32 {
    s.split(char::is_alphabetic)
        .filter(|s| !s.is_empty())
     // ^^^^^^^^^^^^^^^^^^^^^^^^^^
        .map(|num| num.parse::<u32>().unwrap())
        .max()
        .unwrap()
}


以上是如何比较数字分组并返回最大的数字?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>