LoginSignup
5

More than 5 years have passed since last update.

Rustで競技プログラミング用の標準入力関数を作った

Posted at

自己紹介

  • Rust歴: チュートリアルを読んだ
  • 競技プログラミング歴: paizaがSランク行っただけ。その他経験なし。
  • Qiita初投稿

概要

「AtcoderでRust使ってブイブイ言わせたい」というモチベで作りました。色々調べたけど、同じ行に複数の数値が与えられた場合に対応した読み込み関数がなかった。(あったら教えて)
以下のread_line関数を呼び出すごとに、次の行にある任意の個数の数値をVec型に格納して返します。型はu32、f32とかなら動きます。速度に関しては何も調べてないです。

ソースコード


use std::str::FromStr;
use std::fmt::Debug;

fn read_line<T>() -> Vec<T>
where T: FromStr, <T as FromStr>::Err : Debug{
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).unwrap();
    s.trim().split_whitespace().map(|c| T::from_str(c).unwrap()).collect()
}

入力テキスト例

2 3 4 5
4 3 5 6
10 12
13 20 34

関数の使い方


fn main(){

    let x : Vec<u32> = read_line();
    let num = x[1];
    println!("num ={}", num);
    for _ in 0..num{
        let values: Vec<i32> = read_line();
        println!("{:?}", values);
    }
}

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
What you can do with signing up
5