Вернуть массив гласных, используемых в строке - PullRequest
0 голосов
/ 17 марта 2020

Я борюсь с проблемой ruby. Задача:

Напишите метод, который будет принимать строку и возвращать массив гласных, используемых в этой строке.

Пример: count_vowels ( "Быстрая коричневая лиса") должна вернуть ["e", "u", "i", "o", "o"]

count_vowels ("Hello World") должна вернуть ["e", "o", "o"]

До сих пор я пытался экспериментировать с блоками и другими методами массива, такими как

def vowels(string)
 string_array = string.chars
  vowels = ["a", "e", "i", "o", "u"]
  p string_array & vowels

end

также

def vowels (string)
  # Your code here
  arr =(string).downcase.chars
    new =[]
  values = ["a","e","i","o","u"]
arr. { |words| values.include?(words.each) }
    end

Ответы [ 3 ]

3 голосов
/ 17 марта 2020

Для академических целей c есть еще один подход:

def vowels(str)
  # Delete all the non-vowel characters from the string and return the remaining characters
  str.downcase.tr('^aeiou', '').chars
end

vowels("The quick brown fox")
# => ["e", "u", "i", "o", "o"]
vowels("Hello World")
# => ["e", "o", "o"]

Это, по совпадению, основано на примере в документации String#tr.

1 голос
/ 17 марта 2020

Ниже кусок кода должен помочь вам

Отредактировано: -

def count_vowels(word)
   word.downcase.chars.select{|c|  %[a,e,i,o,u].include?(c)}
end
0 голосов
/ 17 марта 2020

Вы можете избежать разбиения строки на массив символов, используя String.scan с регулярным выражением.

string = "The quick brown fox"
string.scan(/(a|e|i|o|u)/i).flatten
#=> ["e", "u", "i", "o", "o"]

string = "Hello World"
string.scan(/(a|e|i|o|u)/i).flatten
#=> ["e", "o", "o"]

i в конце делает регулярное выражение нечувствительным к регистру.

Вероятно, это зависит от размера строки, если будет быстрее построить регулярное выражение и сканировать строку в одном go или сначала разбить строку на массив, а затем выполнить итерацию по всем символам и сравнить их с другим массивом.

...