Ruby 標準入力値の取得(文字列)

paizaラーニング(初心者〜中級者向けのプログラミング学習サービス)のプログラミングスキルチェックというのが楽しいのでよくやっています。

会員登録をすると無料で挑戦できる競技プログラミングのようなものですが、問題や解答をブログやSNSで公開することが禁止されており、模範解答もないようなので、スキル向上にはつながりにくいかもしれません。あくまで"チェック"です。

今後AtCoder(日本最大の競技プログラミングコンテストサイト)にも挑戦していきたいので、そこで必要となる標準入力値の取得方法について簡単にまとめていきたいと思います。

標準入力値の取得方法

paizaのスキルチェックやAtCoderでは、プログラムで使う値が「標準入力」で渡されます。

標準入力とは、コンピュータ上で実行されているプログラムが、特に何も指定されていない場合に標準的に利用するデータ入力元。コンピュータの入力装置やOSが提供するデータ入力機能・経路などを指し、多くのシステムではキーボード装置による利用者の文字入力が標準入力に設定されている。システム上では “stdin” の略号で表されることが多い。 IT用語辞典

Rubyで標準入力値を受け取るには、getsを使います。1行文字列を読み込み、読み込んだ文字列を返すメソッドです。

値の形式は文字列で最後に改行が入った状態で渡されるものとします。

文字列を受け取る

標準入力値がHelloだとすると、

input = gets  #標準入力値をinputという名前の変数に代入
puts input  #=> Hello

では、標準入力値を利用して「Hello ruby!」と出力してみたいと思います。 受け取ったHelloに、半角スペース1つ" ""ruby!"という文字列を足せばいい気がします。

input = gets  #標準入力値をinputという名前の変数に代入
puts input + " " + "ruby!"
 #=> Hello  #改行されてしまった!?
 #=>  ruby!

「Hello ruby!」と1行で表示したかったのに、なぜか2行に分かれてしまいました。 原因を調べるため、putsと似たような機能でデバッグなどに使われるpを使ってみます。

input = gets
p input + " " + "ruby!"  #=> "Hello\n ruby!"

Helloの後ろに謎の文字があることがわかります。この\nは改行文字です。putsでは見えませんでしたが、最後の改行文字も受け取っていたようです。

改行文字を削除するには、chompを使います。

input = gets.chomp
puts input + " " + "ruby!"  #=> Hello ruby!
p input + " " + "ruby!"  #=> "Hello ruby!"

期待どおりの結果が得られました!

まとめ

  • 標準入力値を文字列として取得するには、gets
  • 末尾の改行コードを削除するには、chomp

docs.ruby-lang.org