327
288

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby 標準入力から値を受け取る方法

Last updated at Posted at 2019-04-03

#はじめに
Paizaのプログラミング問題で標準入力を使い、値を持ってくる方法がいくつかあったのでメモ

###前提
使用する言語はRubyです

##一行に一要素だけしか存在しない場合

標準入力
Tokyo
line = gets
p line
出力結果
"Tokyo"

##一行に複数要素存在する場合

標準入力
Tokyo Osaka Kyoto
line = gets.split(' ')
p line
出力結果
["Tokyo", "Osaka", "Kyoto"]

splitを使用することで3つの要素をそれぞれ別のものとして配列に格納しています

###※splitの使い方
splitはsplit('')のシングルクォート内の文字で文字列を分解する
例えば、Tokyoという文字をそれぞれ一文字ずつ取得したければ、シングルクォートの中に何も入れずにすると下記のように取得できる

標準入力
Tokyo
line = gets.split('')
p line
出力結果
["T", "o", "k", "y", "o"]

##複数行に一つずつ要素が存在する場合

標準入力
Tokyo
Osaka
Kyoto
line = readlines
len = line.length
i = 0

while i < len
    line[i] = line[i].chomp
    i += 1
end

p line 
出力結果
["Tokyo", "Osaka", "Kyoto"]

上記のものの簡潔な書き方として、mapを使用したものがあります

標準入力
Tokyo
Osaka
Kyoto
line = readlines.map(&:chomp)
p line 
出力結果
["Tokyo", "Osaka", "Kyoto"]

##複数行に複数要素が存在する場合

標準入力
Tokyo Osaka Kyoto
Japan USA China
line = readlines
len = line.length
i = 0

while i < len
    line[i] = line[i].chomp.split(' ')
    i += 1
end

p line
出力結果
[["Tokyo", "Osaka", "Kyoto"], ["Japan", "USA", "China"]]

上記のものの簡潔な書き方として以下のものもあります

標準入力
Tokyo Osaka Kyoto
Japan USA China
lines = []
while line = gets
    lines << line.chomp.split(' ')
end
p lines
出力結果
[["Tokyo", "Osaka", "Kyoto"], ["Japan", "USA", "China"]]

while line = getsとすることで、標準入力の値を全て取得するまで繰り返されます

####より簡単な方法をコメントでいただいたので追記

標準入力
Tokyo Osaka Kyoto
Japan USA China
lines = readlines(chomp: true).map{|line| line.split(' ')}
p lines
出力結果
[["Tokyo", "Osaka", "Kyoto"], ["Japan", "USA", "China"]]

出力結果を見ると、受け取った値は文字列なので数値を受け取りたい場合は次のようにします
#数値として受け取りたい場合
##一行に一要素だけしか存在しない

標準入力
123
line = gets.to_i
p line
出力結果
123

##一行に複数要素存在する場合

標準入力
1 2 3
line = gets.split(' ')
p line
出力結果
["1", "2", "3"]

このままだと文字列として扱われるので、mapを使用して数値型の配列に変換します

標準入力
1 2 3
line = gets.split(' ').map(&:to_i)
p line
出力結果
[1, 2, 3]

##複数行に一つずつ要素が存在する場合

標準入力
1
2
3
line = readlines.map(&:to_i)
p line 
出力結果
[1, 2, 3]

##複数行に複数要素が存在する場合

標準入力
1 2 3
4 5 6
lines = []
while line = gets
    lines << line.chomp.split(' ').map(&:to_i)
end
p lines
出力結果
[[1, 2, 3], [4, 5, 6]]

####より簡潔に書く方法

標準入力
1 2 3
4 5 6
lines = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}
p lines
出力結果
[[1, 2, 3], [4, 5, 6]]
327
288
3

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
  3. You can use dark theme
What you can do with signing up
327
288

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?