競技プログラミングなどでは、プログラムで使う値が「標準入力」で渡されます。 その値の取得方法について。今回は、取得したい値が複数ある場合です。
標準入力値が複数あるとき
(例題)s1, s2, s3の値が標準入力で渡される。 「私は、s1とs2とs3が好きです。」と表示するプログラムを作成。
値は文字列でスペース区切り、最後に改行を含むものとする。
標準入力値の渡され方について、以下2パターンをそれぞれ考えていきます。
- 1行に1つの値があり、3行ある場合
- 1行に3つの値が並んでいる場合
(1) 1行に1つの値があり、3行ある場合
入力が以下のように3行あった場合です。
標準入力で渡される値はapple, banana, orange
とします。
apple banana orange
gets
は、1行の文字列を受け取るメソッドです。
複数行の値はどうやって受け取るのでしょうか。
答えは単純。gets
をまた書くだけです。
input1 = gets input2 = gets input3 = gets p input1 #=> "apple\n" p input2 #=> "banana\n" p input3 #=> "orange\n"
最後の改行\n
が入ってしまっているので、chomp
をつけます。
そして式展開させれば完成。
input1 = gets.chomp input2 = gets.chomp input3 = gets.chomp puts "私は、#{input1}と#{input2}と#{input3}が好きです。" #=> 私は、appleとbananaとorangeが好きです。
(2) 1行に3つの値が並んでいる場合
まず、普通に受け取ってみます。
input = gets
p input #=> "apple banana orange\n"
1つの文字列として受け取りました(\n
は改行文字)。
単語ごとに分けたいので、配列に入れてみます。
input = gets.split
p input #=> ["apple", "banana", "orange"]
split
は、文字列を区切り文字で分割して配列に入れるメソッドです。
split(',')
のように引数に指定した任意の文字で分割することができます。
引数を省略すると空白文字(半角スペースや改行文字など)で分割されます。先頭と末尾の空白文字は削除されるので、chomp
は省略できるようです。
例題の解答例は以下の通り。
input = gets.split puts "私は、#{input[0]}と#{input[1]}と#{input[2]}が好きです。" #=> 私は、appleとbananaとorangeが好きです。
式展開#{ }
と配列については以下をご覧ください。