假设我期望stdin中有一行包含3个整数.阅读和分析它们最简单的方法是什么?Python中a, b, c = map(int, input().split())或C中scanf("%d %d %d", &a, &b, &c);的 rust 蚀类似功能是什么?

我想出的最好办法是:

let mut line = String::new();
io::stdin().read_line(&mut line).unwrap();
let parts: Vec<&str> = line.split_whitespace().collect();
let a: i32 = parts[0].parse().unwrap();
let b: i32 = parts[1].parse().unwrap();
let c: i32 = parts[2].parse().unwrap();

有没有更简单的方法?

推荐答案

你可以用text_io来做这个:

#[macro_use] extern crate text_io;

fn main() {
    // reads until a whitespace is encountered
    let a: i32 = read!();
    let b: i32 = read!();
    let c: i32 = read!();
}

text_io 0.1.3还支持scan!宏:

let (a, b, c): (i32, i32, i32);
scan!("{}, {}, {}\n", a, b, c);

如果要从文件或其他源读取,也可以在实现Iterat或<Item=u8>的任何类型上使用这两个宏:

use std::io::Read;
let mut file = std::fs::File::open("text.txt").unwrap()
                                              .bytes()
                                              .map(Result::unwrap);
let x: i32 = read!("{}\n", file);

let (x, y, z): (i32, i32, i32);
scan!(file => "{}, {}: {}", x, y, z);

如果编译器可以从上下文推断出这些类型,则可以省略: i32.

Disclaimer: I am the auth或 of text_io.

Rust相关问答推荐

使用铁 rust S还原对多个数组执行顺序kronecker积

用 rust 蚀中的future 展望 struct 的future

是否可以使用Rust宏来构建元组的项?

不能在一个代码分支中具有不变的自身borrow ,而在另一个代码分支中具有可变的self borrow

如何将映射反序列化为具有与键匹配的字段的定制 struct 的向量?

我无法理解Rust范围的定义(Rust Programming Language,第二版克拉布尼克和尼科尔斯)

在macro_rule中拆分模块和函数名

对reqwest提供的这种嵌套JSON struct 进行反序列化

如何获取光标下的像素 colored颜色 ?

类型生命周期绑定的目的是什么?

从 rust 函数返回 &HashMap

str 和 String 的 Rust 生命周期

内部值发生变化时 Rc 的行为

返回迭代器的特征

不能将 `*self` borrow 为不可变的,因为它也被borrow 为可变的 - 编译器真的需要如此严格吗?

如何获取函数中borrow 的切片的第一部分?

是否有适当的方法在参考 1D 中转换 2D 数组

制作嵌套迭代器的迭代器

如何在 Rust 中构建一个 str

为移动和借位的所有组合实现 Add、Sub、Mul、Div