2015-08-15 78 views
0

我想知道"a""z"在找到"a"後是否在一個字符串中。我想了解爲什麼這不起作用:爲什麼在這個函數的字符串中找不到`「az」`?

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

我意識到有一個簡單的方法來實現這一點。我不在尋找另一種解決方案。

+4

什麼是您可以在其中找不到「AZ」輸入? –

+2

嘗試「jimmaz」或「baz」或「jimmazuja」 – jgozal

+3

您需要比「這不工作」更具體。當你期望'true'時,它是否返回'false',反之亦然,如果是的話,'string'的值是什麼時候呢?我不相信你的代碼應該引發一個異常,但是如果這是你的問題,你需要精確地說明異常是什麼以及它發生了什麼。你的代碼非常類似於Ruby(你知道),所以在你開始工作之後,我建議你將它發佈在[Code Review](http://codereview.stackexchange.com/questions/tagged/ruby)上以獲得改進它的建議。 –

回答

5

這段代碼只會在最開始時發現「az」。否則它會return false。推遲return false,直到你走完整個琴絃。

def nearby_az(string) 

    i = 0 
    while i < string.length -1 
    return true if string[i] == "a" && string[i+1] == "z" 

    i += 1 
    end 
    # we can only reach this line if the loop above does not return. 
    # if it doesn't, then the substring we seek is not in the input. 
    return false 
end 

nearby_az('baz') # => true 
+0

啊我明白了。謝謝,我會盡快接受答案。 – jgozal

+0

就像一個筆記,你實際上不需要'return false'中的'return'。 –

+0

@JustinWood:是的,我只是移動了原來的代碼,以保持相似性。此外,有助於澄清。 –

4

@Segio Tulentsev的答案解釋了爲什麼你的壞了。

以下是簡短的實現,如果你有興趣

def nearby_az(str) 
    !! str =~ /a(?=z)/i 
end 
+2

是的,你也可以只返回true如果string.include? 「AZ」。不幸的是,我無法實現這一點。 – jgozal

+1

我想我會看到另一個腔,這個在你的左上前臼齒。 –

+0

請注意,如果您一起尋找az,技術上za滿足此要求。所以你也需要(a(?= z)| z(?= a))。如果不敏感是一個需求,你需要補充一點。 – engineerDave

相關問題