количество гласных в рубине - PullRequest
0 голосов
/ 26 июня 2018

Я возился с некоторыми практическими проблемами, связанными с поступлением в академию APP. Одна конкретная проблема, из-за которой у меня возникают проблемы с пониманием, почему мое решение не работает.

Проблема

# Write a method that takes a string and returns the number of vowels
# in the string. You may assume that all the letters are lower cased.
# You can treat "y" as a consonant.

Вот мой код для решения, которое не проходит тесты.

def count_vowels(string)
  vowels = 0
  word = string.split()
  idx = 0
  while idx <= word.length
    current_char = word[idx]
    if (current_char == "a"||current_char =="e"||current_char=="i"||current_char=="o"||current_char=="u")
      vowels += 1
    end
    idx += 1
  end
  return vowels 
end 

это решение при условии, что оно работает.

def count_vowels(string)
  num_vowels = 0
  i = 0
  while i < string.length
    if (string[i] == "a" || string[i] == "e" || string[i] == "i" || string[i] == "o" || string[i] == "u")
      num_vowels += 1
    end
    i += 1
  end
  return num_vowels
end

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Как уже упоминалось в комментарии выше, вы можете упростить реализацию, используя метод count в String:

 def count_vowels(string)
   string.count('aeiou')
 end
0 голосов
/ 26 июня 2018

В Ruby String#split по умолчанию разбивает строку на слова в пробеле:

"test string split".split() # => ["test", "string", "split"]

Итак, ваше решение подсчитывает количество полных слов, равных гласной (такие слова, как «а» и «я» сами по себе). Ваш будет работать, если вместо этого разделить на символы, передав '' в качестве параметра split:

"test string split".split('') # => ["t", "e", "s", "t", " ",
  "s", "t", "r", "i", "n", "g", " ", "s", "p", "l", "i", "t"]

Однако есть лучшие способы получить каждый символ в строке, например String#each_char:

"test string split".each_char { |char| # increment counter if char is a vowel }

и далее, вы можете просто использовать String#count для подсчета количества гласных:

"test string split".count('aeiou') # => 3
0 голосов
/ 26 июня 2018

В вашем коде должно быть word = string.split("")

Приведенный выше фрагмент разбивает строку на массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...