如何在Rust中拆分一个字符串,我将其作为read!()的输入

时间:2019-10-13 11:45:08

标签: rust

我想根据输入中的空白分割输入的String。 我曾经使用过split_whitespaces()函数,但是当我在自定义输入中使用此函数时,它只会给我第一个String切片。

let s:String = read!();
let mut i:usize = 0;
for token in s.split_whitespace() {
    println!("token {} {}", i, token);
    i+=1;
}

我想念什么?

2 个答案:

答案 0 :(得分:1)

据我所知,read!不是标准宏。快速搜索显示,可能是来自text_io的板条箱(如果您使用外部板条箱,则应在问题中说明)。

来自该板条箱中的文档:

  

read!()宏将始终读取,直到下一个ascii空格字符(\n\r\t或空格)为止。

所以您所看到的是设计使然。

如果您想从stdin中读取整行,可以尝试使用标准功能std::Stdin::read_line

答案 1 :(得分:0)

您缺少可以找到问题根源的测试用例。将代码拆分为一个函数,并用一个测试用例替换read!()宏,您现在可以将其放入main中,在该例中,您可以为函数提供不同的字符串并观察输出。

fn strspilit(s:String){
    let mut i:usize = 0;
    for token in s.split_whitespace() {
        println!("token {} {}", i, token);
        i+=1;
    }
}


fn main() {
    println!("Hello, world!");
    strspilit("Hello Huge World".to_string());

}

然后您将看到代码正在正常工作,but as notices in other answers read!()宏仅返回字符串直到第一个空格,因此您可能应该使用另一种方式来读取输入。