まだ何がベストかわからないのだけど,とりあえず現状は,
N M
みたいに整数のペアが空白区切りで与えられた場合,
use std::io; use std::str::FromStr; fn main() { let stdin = io::stdin(); let mut buf = String::new(); stdin.read_line(&mut buf).ok(); let mut it = buf.split_whitespace().map(|n| usize::from_str(n).unwrap()); let (n, m) = (it.next().unwrap(), it.next().unwrap()); println!("N: {}, M: {}", n, m); }
のように読み込んでいる.
let stdin = io::stdin(); let mut buf = String::new(); stdin.read_line(&mut buf).ok();
で標準入力から1行読み込み,
let mut it = buf.split_whitespace().map(|n| usize::from_str(n).unwrap());
で空白で区切って,usize
に変換し,
let (n, m) = (it.next().unwrap(), it.next().unwrap());
で変数に入れている.
usize
にしているのは,あとでベクタを宣言するときの要素数に使いたいのでとりあえず.
空白で区切ったあとにイテレータにしているのは,it[0]
とかでインデックスを考えるのがめんどくさいので.
it.next()
でとれた方が楽な気がする.
なので,数値のペアではなく a1 a2 ... an
みたいな数列が与えられた場合は,
let v: Vec<i64> = buf.split_whitespace() .map(|n| i64::from_str(n).unwrap()) .collect();
という感じにする.
とりあえず AtCoder の問題をいくつか解いてみた.