我怎么能反转一串整数?

时间:2014-05-20 15:59:00

标签: ruby

我正在尝试将字符串"10010"反转为"01101"。我想我可以尝试使用gsub方法,如ruby文档指南中的类似示例所示:

`"10010".gsub(/[10]/ "1" => "0", "0" => "1")` .

但事实并非如此。我认为gsub的论点不正确。根据我的逻辑,我捕获的是INTEGER 1和0而不是字符串,但我不太清楚如何解决这个问题。有没有办法可以替换.push / .pop等数字,然后将整数更改为字符串?

4 个答案:

答案 0 :(得分:6)

要将0更改为1,反之,不需要gsubString#tr方法更简单,更快捷:

'1010'.tr('10', '01')
# => "0101"

'10010'.tr('10', '01')
# => "01101"

答案 1 :(得分:4)

您的方法有效,您只是错过了一个逗号:

"10010".gsub(/[01]/, "1" => "0", "0" => "1")
#=> 01101

答案 2 :(得分:3)

虽然你可以使用gsub,但要以正确的方式进行操作并旋转位:

("10010".to_i(2) ^ 0xff).to_s(2) # => "11101101"

使用gsub会导致错误答案,因为01101与反转8位数字的位不同:

'01101'.to_i(2) # => 13
'11101101'.to_i(2) # => 237

这可能有助于您了解正在发生的事情:

'%08b' % 0x55 # => "01010101"
'%08b' % 0xff # => "11111111"
'%08b' % 0xaa # => "10101010"

'%08b' % (0x55 ^ 0xff) # => "10101010"

答案 3 :(得分:0)

如果你不关心效率(因为你会读三次字符串):

irb(main):004:0> puts "10010".gsub("1", "X").gsub("0", "1").gsub("X", "0")
01101

至于你的方法,你确定你不会错过逗号吗?

irb(main):004:0> puts "10010".gsub("1", "X").gsub("0", "1").gsub("X", "0")
01101