[Ruby]dorill73

プログラミング

問題

任意の2つの文字列があります。
大文字と小文字の違いを無視して、どちらかの文字がもう一方の文字の最後にある場合はTrueを、ない場合はFalseを出力するプログラムを作りましょう。

自分の回答

def end_other(a, b)
  a = a.downcase.reverse
  b = b.downcase.reverse
  p a.slice(0..b.length - 1)
  p b
  if a.slice(0..b.length - 1) == b || b.slice(0..a.length - 1) == a
    puts "True"
  else
    puts "False"
  end
end

まず、「大文字と小文字の違いを無視する」と言う事なので、downcaseメソッドを使って、小文字に揃えます。また、簡単のため、reverseメソッドを使って文字列を反転させます。

次にif文の分岐を例を使って、見ていきましょう。

例
a = 'Hiabc', b = 'abc'

downcaseとreverseを使って小文字化&反転
a = a.downcase.reverse = cbaih
b = b.downcase.reverse = cba

a.slice(0..b.length - 1) == b の部分を見ていきます。
b.length = 3 となるのでここから1を引いて、sliceで切り取ると
a.slice(0..2) = cba
となります。これがbと等しければ、"True"を返します。
タイトルとURLをコピーしました