我已经看到一种测试字符串是否为字母字符的方法-包含字母的每个字母的句子-但我不太理解。我想知道为什么我的方法不起作用。
def is_pangram(string)
alpha = ("a".."z").to_a
i = 0
while i < string.length
if string.downcase[i] == alpha.any?
alpha.delete(string.downcase[i])
end
i += 1
end
if alpha.length > 0
puts "This string is not a pangram"
else
puts "This string is a pangram"
end
puts alpha.length
puts alpha
end
is_pangram("The quick brown fox jumps over the lazy dog")
答案 0 :(得分:1)
阿列克谢(Aleksei)已经回答了这个问题……这是一种更简洁的方法。
def is_pangram(string)
alpha = ("a".."z").to_a
string.downcase.split("").each do |i|
alpha.delete(i) if alpha.include?(i)
end
if alpha.empty?
puts "This string is a pangram"
else
puts "This string is not a pangram"
end
puts alpha.length
puts alpha
end
is_pangram("The quick brown fox jumps over the lazy dog")
答案 1 :(得分:1)
以下内容如何?
def is_pangram?(str)
str.downcase.scan(/[a-z]/).uniq.size == 26
end
is_pangram? "The quick brown dog jumps over the lazy fox."
#=> true
is_pangram? "The quick brown dog jumps over the wary fox."
#=> false
答案 2 :(得分:0)
但我不太了解
(预定)算法构建一个包含所有(26)个字母的数组。然后,它逐个字符地处理字符串,从第一个数组中删除该字符(如果它仍在其中)。之后,它仅测试第一个数组是否为空。如果是这样,则字符串中的字符导致删除了数组中的所有字符,因此该字符串是一个连字符。如果不是,则字符串中某些字符“丢失”,而该字符仍在数组中。