0
0

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 1 year has passed since last update.

2つの文字列の末尾に対して一致・不一致を判断するプログラムの実装

Posted at

問題

2つの文字列の末尾の文字を比較して、一致する場合はTrue、
一致しない場合はFalseを出力するプログラムを実装します。

以下の要件を満たすend_otherメソッドを実装しましょう。

  • メソッドの引数に、任意の2つの文字列を指定する。
  • 引数に指定された2つの文字列のうち、
     どちらかがもう一方の文字列の末尾にある場合は、Trueを出力する
  • 上記を満たせていない場合は、Falseを出力する
  • 入力した文字が大文字でも小文字でも、同一の文字として処理を行う
雛形
def end_other(a, b)
  # 処理を記述
end

# 呼び出し例
end_other('Hiabc', 'abc')

解答

def end_other(a, b)
  a_down = a.downcase
  b_down = b.downcase
  a_len = a_down.length
  b_len = b_down.length
  if b_down.slice(-(a_len)..- 1) == a_down || a_down.slice(-(b_len)..- 1) == b_down
    puts "True"
  else
    puts "False"
  end
end

# 呼び出し例
end_other('Hiabc', 'abc')

解説

sliceメソッドは配列から要素を取り出す事ができる。

array = ["Ruby","Python","Java"]
p array.slice(0)

実行結果

"Ruby"

逆にマイナス使って、配列の最後の要素から取り出すこともできる

array = ["Ruby","Python","Java"]
p array.slice(-1)

実行結果

"Java"

解答では

a_down = hiabc
b_down = abc
a_len = 5
b_len = 3

と代入されている。
if文でabcの最後にHiabcが含まれているか、
Hiabcの最後にabcが含まれているか判別している。

左辺

b_down.slice(-(a_len)..- 1) は、 b_down.slice(-5..-1)
b_down = abc となっているので範囲外(-5もない)
為切り取る事ができない。
その結果、nil == a_downとなるのでfalseが返される。

右辺

a_down.slice(-(b_len)..- 1) は、 a_down.slice(-3..-1)
インデックス番号-3から-1という条件で切り取るとabcが残る。
結果、abc == b_downとなるので、trueで返される。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?