2015-12-26 31 views
-1

編寫一個接受字符串的方法並返回true,如果字母「z」出現在三個字母之內之後一個「一個」。您可能會認爲該字符串只包含小寫字母。這裏是我有什麼:如果字符串包含「a」然後是「z」,ruby將返回true

def nearby_az(string) 
string.downcase! 
i = 0 
    while i < string.length 
     if (string[i] == "a" && string[i] == "z") 
      true 
     else 
      false 
     end 
    end 
end 

puts('nearby_az("baz") == true: ' + (nearby_az('baz') == true).to_s) 
puts('nearby_az("abz") == true: ' + (nearby_az('abz') == true).to_s) 
puts('nearby_az("abcz") == true: ' + (nearby_az('abcz') == true).to_s) 
puts('nearby_az("a") == false: ' + (nearby_az('a') == false).to_s) 
puts('nearby_az("z") == false: ' + (nearby_az('z') == false).to_s) 
puts('nearby_az("za") == false: ' + (nearby_az('za') == false).to_s) 
+0

您當前的表情將始終爲假。您不能同時將值設爲a和z。 – Makoto

回答

3

一個正則表達式將是最好的。嘗試

def nearby_az(string) 
    (string =~ /a.{0,2}z/) != nil 
end 

編輯: 按了「如果需要聲明要求」 :)

def nearby_az(string) 
    if (string =~ /a.{0,2}z/) != nil 
     return true 
    end 
    return false 
end 

此代碼的工作是它搜索輸入字符串爲「A」的方式。在那之後,這段時間表明你可以擁有任何角色。之後你有{0,2}這是一個修改週期的指示你可以有0到2的任何字符。在此之後,你必須有一個「z」,這符合你的必須在一個「a」的3個字符內有一個z。

我已經將此正則表達式保存到regex101 here,因此您可以嘗試各種輸入以及更改正則表達式以更好地理解它。

+0

用z結尾的正則表達式會更好 –

+0

是的,小錯字 - thx :) –

+0

如果下面的代碼可以寫在if語句中,那會更好,因爲那就是我的老師所要求的。謝謝,如果你可以解釋它,因爲我是初學者,並想了解代碼的工作原理。謝謝@ Martin Konecny:(string =〜/a.{0,2}z/)!=無 –

1

要解決你的代碼,你需要:

  • 增量我在循環的結束。
  • 搜索3個一個字母
  • 還真內的Z字母時走出循環

這裏當條件滿足

  • 將返回false是它應該是什麼樣子:

    def nearby_az(string) 
        string.downcase! 
        i = 0 
        while i < string.length do 
         return true if string[i] == "a" && string[i+1,3].include?(?z) 
         i+=1 
        end 
        return false 
    end 
    
  • 相關問題