1
1

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 3 years have passed since last update.

Ruby 標準入力

Posted at

はじめに

今回はプログラミング問題で標準入力を使うことが多いので、メモを残しておこうと思います。
使用言語はRubyで行います。

文字列の場合

1行1要素だけしか存在しない場合

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

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

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

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

複数行1つずつ要素が存在する場合

標準入力
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"]]

出力結果を見ると、受け取った値は文字列なので数値を受け取りたい場合は次のようにします

数値で受け取りたい場合

1行に1要素だけしか存在しない

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

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

標準入力
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つずつ要素が存在する場合

標準入力
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]]

最後に

この他にもいろんな方法があると思うので随時更新していこうと思います。

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?