2016-03-19 5 views
0

2つのワード状態がニュージャージー州とサウスカロライナ州などのように機能するようにするには、どのような方法が欠けていますか?単語間のアンダースコアを入れればわかりますが、あまりクールではないアンダースコアを入力に含める必要もあります。私は本当に助けていただければ幸いです。ありがとう!Ruby:空白で区切られた2ワードのハッシュキー

+0

こんにちは@deftool! [コードブロックをフォーマットする](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)して、ユーザーがコードをより効率的に読めるようにしてください。 )! –

+0

訂正ありがとうございます。私はまだこれらすべてのものを学ぶことを試みています。 – deftool

答えて

1

大文字は、文字列の最初の文字のみをフォーマットするため、複数の単語を含む文字列では機能しません。あなたは、スペースであなたの文字列を分割し、各単語を大文字にし、それをバックに参加しようとすることができます:

state = gets.chomp.split(' ').map(&:capitalize).join(' ') 

Demonstration

あなたがRailsのを使用していた場合、あなただけのtitleizeを使用することができます。

gets.chomp.titleize 
+1

うわー!ありがとう! state = gets.chomp.split( '').map(&:capitalize).join( '') は完全にうまく機能しました。しかし、もしあなたが気にしないなら。あなたは私にマップ方法を説明できますか?私はちょうど2週間前にコーディングを学び始めました。 – deftool

0

ユーザー入力を変換するヘルパーメソッドを追加できますか?ヨルダンへ

#state = "new jersey" 
state.gsub!(/\b[a-z]/, &:capitalize) 
#state = "New Jersey" 
  • クレジット最も簡単な解決策は、ユーザの入力をハッシュキーを小文字にし、その後、downcaseことであろうように、コメント
+0

または、より簡潔に: 'state.gsub(/ \ b [a-z] /、&:capitalize)' –

+0

ああ!私は大文字小文字の小文字を@CarySwoveland小文字にしたことに気付かなかった...あなたの答えを見た^ – Trajanson

+0

'capitalize'は各単語の最初の文字で構成される文字列を大文字にしています。他の文字を小文字に変換するために、正規表現を変更して各単語を完全に一致させる必要があります。脇に:私はあなたの答えにあなたの提案に感謝しないことをお勧めします。それをしたい場合は、コメントを使って答えをきれいにしてください。 (一部の人は同意しないかもしれません) –

0

にそれはそうです。

us_capitals = { 
    # ... 
    "nebraska" => "Lincoln", 
    "nevada" => "Carson City", 
    "new hampshire" => "Concord", 
    "new jersey" => "Trenton", 
    # ... 
} 

loop do 
    puts "Enter a state to lookup it's capital:" 

    state = gets.chomp.downcase 

    puts us_capitals[state] 
end 
+0

OPには、この質問とは無関係の理由で、州がハッシュで大文字にする必要があることに注意してください。 –

1

gets"west virginIa\n"を返すとします。

r = /[[:alpha:]]+/ 
state = gets.chomp.squeeze(' ').gsub(r) { |s| s.capitalize } 
    #=> "west virginIa\n".chomp.squeeze(' ').gsub(r) { |s| s.capitalize } 
    #=> "west virginIa".squeeze(' ').gsub(r) { |s| s.capitalize } 
    #=> "west virginia".gsub(r) { |s| s.capitalize } 
    #=> "West Virginia" 

us_capitals[state] 
    #=> "Charleston" 

getsもし戻っ​​その後、我々は

state = gets.chomp.squeeze(' ').gsub(r) { |s| s.capitalize } 
    #=> "West Virgin1a" 
us_capitals[state] 
    #=> nil 

リコールを得るString#capitalizeは、(それが文字であれば)大文字に文字列の最初の文字を変換し、それはまた、他のすべてを変換していること小文字にする文字列の文字。

+0

ありがとうございました。あなたのソリューションもかなりうまくいきました。私がpotashinに言ったように、私はプログラミングの初期段階にいる。私は本当に助けていただきありがとうございますが、コードは私の現在の能力にはあまりにも技術的に見えます。もしあなたがr変数とgsubメソッドにしたことをとてもうれしく思います。それ以外の場合は大丈夫です。私はあまり気にしたくありません。 – deftool

+0

'/ [[:alpha:]] + /'は1つ以上の文字列にマッチする正規表現です。文字列 "23aBcD?e"では、例えば、 "aBcD"と "e"とが一致する。正規表現はオブジェクトなので、変数に代入することができます(ここでは 'r =/[[:alpha:]] + /')。したがって、 'gsub(r)'は 'gsub(/ [[:alpha:]] + /)'と同じです。 'gsub(r){| s | s.capitalize} 'は、[String#gsub](http://ruby-doc.org/core-2.2.0/String.html#method-i-gsub)の形式を使用して正規表現にマッチする各文字列を渡します。ブロックとブロック変数(ここでは 's')を一致した文字列に設定します。ブロックによって計算された値は 's'の置換値です。 –

関連する問題