如何匹配从标准输入读取的字符串?

dda*_*son 4 rust

在学习Rust的练习中,我正在尝试一个接受你的名字的简单程序,然后打印你的名字,如果它是有效的.

只有"Alice"和"Bob"是有效名称.

use std::io;

fn main() {
    println!("What's your name?");
    let mut name = String::new();

    io::stdin().read_line(&mut name)
    .ok()
    .expect("Failed to read line");

    greet(&name);
}

fn greet(name: &str) {
    match name {
        "Alice" => println!("Your name is Alice"),
        "Bob"   => println!("Your name is Bob"),
        _ => println!("Invalid name: {}", name),
    }
}
Run Code Online (Sandbox Code Playgroud)

当我cargo run这个main.rs文件,我得到:

What's your name?
Alice
Invalid name: Alice
Run Code Online (Sandbox Code Playgroud)

现在,我的猜测是,因为"爱丽丝"属于类型&'static strname属于类型&str,可能它没有正确匹配...

Hau*_*eth 7

我打赌它不是由类型不匹配引起的.我打赌我有一些看不见的字符(在这种情况下换行).要实现您的目标,您应该修剪输入字符串:

match name.trim() {
    "Alice" => println!("Your name is Alice"),
    "Bob"   => println!("Your name is Bob"),
    _ => println!("Invalid name: {}", name),
}
Run Code Online (Sandbox Code Playgroud)