2015-12-26 35 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 
    
  • 相关问题