最直观解法:

use std::io;
fn main() {
    let mut s = String::new();
    io::stdin().read_line(&mut s).expect("Failed to read line");
    let mut v = vec![0u32; 4];
    for &i in s.trim().as_bytes() {
        match i {
            32 => v[1] += 1,
            65..=90 | 97..=122 => v[0] += 1,
            48..=57 => v[2] += 1,
            _ => v[3] += 1,
        }
    }
    for &i in v.iter() {
        println!("{}", i);
    }
}

我相信可以用链式写法一步到位,让我想想。