LoginSignup
9
7

More than 5 years have passed since last update.

競プロ用、Rust標準入力パースマクロ

Last updated at Posted at 2018-03-25

競プロで標準入力のパースがめんどうだったのでマクロ作りました。
AtCoderのRust(1.15.1)でテスト済みです。

ソースコード

使い方

事前準備

標準入力を全て読み込む

let text = {
    let mut s = String::new();
    io::stdin().read_to_string(&mut s).unwrap();
    s
};

入力値
5
10 20
1 a
2 b
3 c
4 d
5 e
1 2 3 4 5
input!(text=>
    (n:usize)
    (a:i64 b:i64)
    {n;list:(i64,#)}
    (arr:[i64])
);
assert_eq!(n, 5);
assert_eq!(a, 10);
assert_eq!(b, 20);
assert_eq!(list, vec![(1,"a"),(2,"b"),(3,"c"),(4,"d"),(5,"e")]);
assert_eq!(arr, vec![1,2,3,4,5]);

解説

input!(入力値=>パーサー...);

1行の入力

(変数名:型...)

複数行の入力

{行数;変数名:型}

構文 解説 例入力
単一の型とマッチ(parse::<型>()でパースされる) i64 10
# 文字列 # abc
@ 1から始まるインデックスを0からに変換するやつ。
つまりusizeでパースして-1してるだけ
@ 1
[型] 配列 [i64] 1 2 3 4 5
(型,...) タプル (i64,#) 10 abc
9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7