#文字と数値の入力は分けるのが当たり前?
name = gets.chomp
age = gets.to_i
のように、文字列と数値で分けて書く基本を最初の方に学びましたが、頭を悩ませる問題と出会いました。
まだ、解くための技術や知識、プログラミングとしての語彙が少ない自分には難しいです。
問題
n人の名前と年齢が Qiita 30 のように名前と年齢の間には半角空白が入力される。
名前と年齢に1を加えた数値を Qiita 31のように出力してください。
考えた事
・n人の不特定多数の要素があるので、n回入力(n.times)は使う
・文字列と数値が同じ変数に入っているので、取り除く(name.gsub(/[^0~9]/."")
・取り除いたものに +1 をする。
# 結果
n.times の部分と取り除いたものに+1をするは合っていたが、エラー頻出するばかりで解けたものじゃありませんでした。
以下答え
n = gets.to_i #n人の入力
name_age = Array.new(n) #配列Arrayを生成して、n個入力
n.times { |i| name_age[i] = gets.split(' ')}
#ここで、入力された文字と数値は配列の中で分けられる。
#例)|1| name_age|1| = ['Qiita' ’30']
name_age.each do |person|
name = person[0] #0番目に名前が格納されているので変数nameに代入
age = person[1].to_i #1番目に年齢が格納されているので変数ageに代入
#^~~~~標準入力されているので、数値に変換
puts name + ' ' + (age +1 ).to_s #数値に変換したageを文字に再変換して出力
end
今回の学び
配列名 = Array.new で変数を作成できる
配列に入力された文字に空白がある事で、gets.split(' ')で文字列を分けることができる
分けた文字列を変数に入れ直して.to_iで数値に変換、またto_sで文字に変換できる
ほとんどわかっていない状態でよくこの問題に取り組もうとしたものです。
読書と同じく、意味のわからない所はきちんと調べてまとめていく事で、自分の血肉にしていきたいです。
もし間違い等ありましたらコメントお願いします。