2011-07-16 8 views
0

私は、ユーザーの入力を受け取り、各文字を右にシフトするプログラムを書いてみたい(a = b、b = c、c = dなど)。入力をこのように間隔を空けずに、どうすればいいでしょうか?ルビーを学ぶための単純な陰謀?

+0

あなたが試したことを私たちに見せてください。 –

答えて

3

z-> aも必ず入力してください。バイナリ文字列の場合

"hallo world zzz".tr("a-z", "b-za") 
+1

だから私はルビーが大好きです: – Thilo

0

:このよう

input = ... 

encrypted =  input.bytes.map {|b| (b == 255 ? 0 : b+1).chr }.join 
decrypted = encrypted.bytes.map {|b| (b == 0 ? 255 : b-1).chr }.join 

decrypted == input # => true 
0

私はあなたに解決策を書いていないよ、それは本当に簡単です。

Rubyの文字列操作について読む必要があります。

http://blog.grayproductions.net/articles/ruby_19s_string

http://ruby-doc.org/core/classes/String.htmltrを探してください)

、あなたがしたい場合は、最後の一つは1.8.7と1.9.1

http://abhilekh.wordpress.com/2009/10/22/ruby-1-8-7-vs-ruby-1-9-1/

+0

シンプルな暗号化に興味がある方は、簡単にプログラムできるRC4を見て、シーザーのサイファーよりもはるかに強力です。 – rossum

1

の違いについて良い記事です単語内のすべての文字を1桁右にシフトするには、Arrayクラスのrotateメソッドを使用して文字列に戻します。

irb(main):008:0> word = "helloworld" 
=> "helloworld" 
irb(main):009:0> array = [] 
=> [] 
irb(main):010:0> word.each_char { |c| array << c } 
=> "helloworld" 
irb(main):011:0> array 
=> ["h", "e", "l", "l", "o", "w", "o", "r", "l", "d"] 
irb(main):012:0> array = array.rotate(-1) 
=> ["d", "h", "e", "l", "l", "o", "w", "o", "r", "l"] 
irb(main):014:0> array.join('') 
=> "dhelloworl" 

希望は2年後です!

+0

Lolありがとう!私はこの質問を書いたことを覚えていないが、私は再びルビーを学ぼうとしているので、確かにこれを行うだろう! –

関連する問題