はじめに
この記事は、プログラミング問題などでよく見られる、標準入力から値を受け取る方法をまとめたものです。
前提
使用する言語はRubyです。
一行に1要素のとき(文字列)
標準入力
Ruby
標準入力を受け取るコード
string = gets
出力するコード
p string
出力結果
"Ruby"
一行に半角スペース刻みで要素があるとき(文字列)
標準入力
Ruby PHP Python
標準入力を受け取るコード
strings = gets.split
出力するコード
p strings
出力結果
["Ruby", "PHP", "Python"]
splitを使用することで、3つの要素をそれぞれ別のものとして配列に格納しています。
※splitの使い方
split(' ')としている記事などもありますが、
半角スペース刻みの入力値の場合は引数(' ')を指定しなくても問題ありません。
つまりsplit(' ') ≒ split (※半角スペース刻みの入力値のときのみです)
複数行に一つずつ要素が存在するとき(文字列)
標準入力
Ruby
PHP
Python
標準入力を受け取るコード
strings = readlines.map(&:chomp)
#またはこちら(パフォーマンス的に推奨)
strings = readlines(chomp: true)
出力するコード
p strings
出力結果
["Ruby", "PHP", "Python"]
複数行に半角スペース付きで要素が複数存在するとき(文字列)
標準入力
Ruby PHP Python
Java C# C++
標準入力を受け取るコード
strings = readlines.map{ |i| i.split.map(&:chomp)}
# またはこちら(推奨)
strings = readlines.map(&:split)
出力するコード
p strings
出力結果
[["Ruby", "PHP", "Python"], ["Java", "C#", "C++"]]
入力値が数値の場合
一行に数値がひとつのとき
標準入力
123
標準入力を受け取るコード
number = gets.to_i
出力するコード
p number
出力結果
123
一行に半角スペース刻みで数値があるとき
標準入力
1 2 3
標準入力を受け取るコード
numbers = gets.split.map(&:to_i)
出力するコード
p numbers
出力結果
[1, 2, 3]
複数行に一つずつ数値が存在するとき
標準入力
1
2
3
標準入力を受け取るコード
numbers = readlines.map(&:to_i)
出力するコード
p numbers
出力結果
[1, 2, 3]
複数行に半角スペース刻みで要素が存在するとき
標準入力
1 2 3
4 5 6
標準入力を受け取るコード
numbers = readlines.map{ |i| i.split.map(&:to_i) }
出力するコード
p numbers
出力結果
[[1, 2, 3], [4, 5, 6]]