def letter_case_count(string)
char = new Hash
char[:lower] = 0
char[:upper] = 0
char[:neither] = 0
string.split("").each do |x|
if ('A'..'Z').include?(x)
char[:upper]++
elsif ('a'..'z').include?(x)
char[:lower]++
else
char[:neither]++
end
end
end
puts letter_case_count('abCdef 123') == { lowercase: 5, uppercase: 1, neither: 4 }
puts letter_case_count('AbCd +Ef') == { lowercase: 3, uppercase: 3, neither: 2 }
puts letter_case_count('123') == { lowercase: 0, uppercase: 0, neither: 3 }
puts letter_case_count('') == { lowercase: 0, uppercase: 0, neither: 0 }
このエラーが発生します。"elsif"について予期しないキーワードエラーが発生する
(repl):9: syntax error, unexpected keyword_elsif
elsif ('a'..'z').include?(x)
^
(repl):11: syntax error, unexpected keyword_else
(repl):13: syntax error, unexpected keyword_end
(repl):20: syntax error, unexpected end-of-input, expecting keyword_end
...: 0, uppercase: 0, neither: 0 }
...
^
予期しないキーワードや予期しない入力があります。なぜ、私はRubyでほぼ一年間プログラミングしていないので、問題が何であるかわかりません。
「短い」は必ずしもないが、「より良い」(それらのすべてが失敗します)。文字列を各カウントごとに1回スキャンしています。 – Stefan
は '( 'A' .. 'Z')'と '( 'a' .. 'z')の2つの範囲を生成するよりも良くないです。文字列。 –
'count'もこのように使うことができます:' str.count( "az") '、' str.count( "AZ") '、' str.count( "1-9") 'など –