0

単語が母音、1つの子音、2つの子音、または3つの子音で始まるかどうかを判断しようとしています。これは私がこれまでに持っているものですが、私はそれを機能させることができません。

  def vowel_first(word)
    word[0] =~ /[aeiou]/
  end

  def consonant_first_three(word)
    word[0-2] =~ /^[^aeiou]{3}/
  end

  def consonant_first_two(word)
    word[0-1] =~ /[^aeiou]{2}/
  end

  def consonant_first(word)
    word[0] =~ /[^aeiou]{1}/
  end
4

4 に答える 4

3

これらのダッシュはword[0-2]失敗します。..それらを演算子に置き換えてみてください(結果は範囲になります)。

于 2012-11-28T22:49:56.583 に答える
0

ここでの問題は、word比較前のマングリングのようです。この場合0-1-1これは「最後の文字」を意味します。同様に、word[0]はインデックス 0 の最初の文字を参照し、 for"foo"は に評価され"f"ます。

そのまま使用する必要wordがあります。正規表現は正しく固定されており、一致するものを指定すれば機能するはずです。

注意として、その演算子は Perl から引き継がれたものであるため、 using のword.match(/.../)方が読みやすいことがよくあります。Perlは、読みやすさが正確に評価されたことがない言語です。word =~ /.../

于 2012-11-28T22:49:19.700 に答える
0

問題を引き起こしている単語のケースですか?以下の 2 つのオプションのいずれかを使用してみてください。

def vowel_first(word)
  word[0] =~ /[aeiouAEIOU]/
end

def vowel_first(word)
  word[0] =~ /[aeiou]/i
end

または、正規表現にすべての作業をさせるだけで、実際に文字を抽出する必要はありません。

def vowel_first(word)
  word =~ /^[aeiou]/i
end
于 2012-11-28T22:54:56.117 に答える
0

単語の先頭にある同時子音の数を簡単に確認できます。

leading_consonants = word.match(/^[^aeiou]{,3}/)[0].length

ゼロの場合、単語は非子音で始まります。要件によっては、これで十分な場合があります。句読点などを考慮する必要がある場合は、もう少し賢くする必要があるかもしれません。

matches = word.match(/^([aeiou]?)([^aeiou]{,3})/)
leading_vowel = matches && matches[1].length > 0 || false
leading_consonants = matches && matches[2].length || 0
于 2012-11-28T22:56:20.417 に答える