#competitive-programming #stdin #input #parser #io #utility

readput

为 Rust 竞赛编程提供快速且简单的 stdin 输入解析

3 个版本

0.1.2 2023 年 10 月 30 日
0.1.1 2023 年 10 月 30 日
0.1.0 2023 年 10 月 30 日

#20 in #competitive-programming

BSD-3-Clause 许可协议

10KB
139 行代码(不包括注释)

readput

为 Rust 竞赛编程提供快速且简单的 stdin 输入解析。

用法

注意: 输入可以在同一行,也可以不在同一行,这没有关系。它们由空格或换行符分隔。多余的输入将缓存到下一次 read() 调用。

创建 Scanner

创建一个新的 Scanner。目前只支持 ASCII。

use readput::AsciiScanner;
use readput::Scanner;

let mut cin = AsciiScanner::new();

读取单个值

读取单个值。对于非 std 类型,在使用 impl_cin_type!(type) 之前或使用 cin.read_cust_s() 之前,它们也必须实现 FromStr 和 Debug。

let v: i128 = cin.read();

读取元组

读取具有可变大小和自定义类型的元组。 (适用于所有实现了 FromStrDebug 的类型)

let (a, b, c): (String, i128, u32) = cin.read();
let (d, e): (i32, i32) = cin.read();

读取元组向量

读取元组向量。 3 是要读取的向量中的元组数量。 (适用于所有实现了 FromStrDebug 的类型)

let vec: Vec<(u32, String)> = cin.read_vec(3);

读取单个值向量

读取单个值向量。 3 是要读取的元素数量。对于非 std 类型,在使用 impl_cin_type!(type) 之前或使用 cin.read_cust_v() 之前,它们也必须实现 FromStr 和 Debug。

let vec: Vec<u32> = cin.read_vec(3);

遍历输入

遍历输入。这将无限循环。 (阻塞,直到输入新输入) 对于非 std 类型,在使用之前必须实现 FromStr。

for (a, b) in cin.iter::<(String, u32)>() {
    println!("{} {}", a, b);
}

依赖项