Edited at

【Rust】標準入力から文字列を読み取り、指定の型に変換する関数

More than 1 year has passed since last update.

競技プログラミング用です。コピペしてそのまま使えます。


標準入力から一行を読み取り、指定の型に変換する関数

fn read<T: std::str::FromStr>() -> T {

let mut s = String::new();
std::io::stdin().read_line(&mut s).ok();
s.trim().parse().ok().unwrap()
}


標準入力から一行を読み取り、空白文字で分割し、各要素を指定の型に変換する関数

fn read_vec<T: std::str::FromStr>() -> Vec<T> {

let mut s = String::new();
std::io::stdin().read_line(&mut s).ok();
s.trim().split_whitespace()
.map(|e| e.parse().ok().unwrap()).collect()
}


標準入力からn行を読み取り、各行を空白文字で分割し、各要素を指定の型に変換する関数

fn read_vec2<T: std::str::FromStr>(n: u32) -> Vec<Vec<T>> {

let mut v2 = Vec::new();
for _ in 0..n {
let mut s = String::new();
std::io::stdin().read_line(&mut s).ok();
let v = s.trim().split_whitespace()
.map(|e| e.parse().ok().unwrap()).collect();
v2.push(v);
}
v2
}


すべての関数を一つのソースコードにまとめたもの

fn read<T: std::str::FromStr>() -> T {

let mut s = String::new();
std::io::stdin().read_line(&mut s).ok();
s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
read::<String>().split_whitespace()
.map(|e| e.parse().ok().unwrap()).collect()
}

fn read_vec2<T: std::str::FromStr>(n: u32) -> Vec<Vec<T>> {
(0..n).map(|_| read_vec()).collect()
}