search
LoginSignup
0

posted at

本日の基礎練習問題①(22/3/23)

問題
以下の要件を満たすxyz_thereメソッドを実装しましょう。
任意の文字列から連続する文字列"xyz"を探し、その直前にピリオド(.)がない場合はTrueを出力する
任意の文字列から連続する文字列"xyz"を探し、その直前にピリオド(.)がある場合はFalseを出力する
上記2つの条件に当てはまらない場合はFalseを出力する

雛形.
def xyz_there(str)
  # 処理を記述
end

# 呼び出し例
xyz_there('abcxyz')

出力例
xyz_there('abcxyz') → True
xyz_there('abc.xyz') → False
xyz_there('xyz.abc') → True
xyz_there('azbycx') → False
xyz_there('a.zbycx') → False

私の回答

ruby.
def xyz_there(str) 
  if str.include?(".xyz")
    puts "False"
  elsif str.include?("xyz")
    puts "True"
  else
    puts "False"
  end
end

# 呼び出し例
xyz_there('abcxyz')

解説

まずif文でinclude?メソッドを使い".xyz"がstrに含まれているかどうか判断します。
次に"xyz"を同じように判断します。
判断する順番に気をつけて処理を記述しました。

模範回答

ruby.
def xyz_there(str) 
  if str.include?(".xyz")
    puts "False"
  elsif str.include?("xyz")
    puts "True"
  else
    puts "False"
  end
end

# 呼び出し例
xyz_there('abcxyz')

模範解説

include?を用いて、対象となる文字列が含まれているかどうかを、各条件式で判別しています。
ポイントとしては、str.include?(".xyz")の条件式をstr.include?("xyz")より前に設置することです。
例えば"abc.xyz"という文字列の場合は、str.include?("xyz")においてもtrueとなってしまうため、先に".xyz"を含むかどうかを判別する必要があります。

感じたこと

今回使用したinclude?メソッドは一度学習したことがあったので覚えていた。
文字列判断の順番で処理結果がおかしくなるので、if文設定の場合はしっかりと順番を考えて記述していきたい。

アドバイスやご指摘等ございましたらぜひお願いします!!

以上

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
What you can do with signing up
0