测试pangram

时间:2018-10-10 13:42:29

标签: ruby pangram

我已经看到一种测试字符串是否为字母字符的方法-包含字母的每个字母的句子-但我不太理解。我想知道为什么我的方法不起作用。

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")

3 个答案:

答案 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)个字母的数组。然后,它逐个字符地处理字符串,从第一个数组中删除该字符(如果它仍在其中)。之后,它仅测试第一个数组是否为空。如果是这样,则字符串中的字符导致删除了数组中的所有字符,因此该字符串是一个连字符。如果不是,则字符串中某些字符“丢失”,而该字符仍在数组中。