ruby - 在ruby中按整数递增字符串

标签 ruby

假设字符串为"abc",用户输入为3,则输出为"def"

每个字符都应该由用户输入作为整数值增加。

我写了一段代码,但它给出了一个错误。还有其他方法吗?

#!/usr/bin/ruby -w

puts "Enter the value of n";
$n=gets;
s = String.new("abc");
s.split("").each do |i|
    $j = 0;
    x = i;
    begin
         x.next;
         $j = $j + 1;
    end while $j < $n

    puts x;
end

最佳答案

有几件事要添加到您的代码中:

  • 改为String.new ,您只需在引号内添加您的字符串即可。
  • str.split("")可以是str.chars .
  • $j = $j + 1可以是$j += 1 .
  • 如果您在 $j 之间进行比较和 $n然后 <<应该是 < .
  • 你不需要;除非你全部写在一行中。
  • begin; end while可以只是while; end

我猜它可能是这样的:

n = gets.to_i
s = 'abc'
s.split('').each do |i|
  j = 0
  x = i
  while j < n
    x = x.next
    j += 1
  end
  puts x
end

但你可以使用 String#ord 在字符串中的每个字符上返回它的序数,添加用户输入,然后添加 String#chr 获取该数字的 ASCII 字符:

# With n being the user's input as integer, in this case 3.
p 'abc'.chars.map { |char| (char.ord + n).chr }.join 
# "def"

已添加 n = gets.to_i正如@Ganesh 在评论中所述。

如果寻找凯撒密码实现:

def foo(string, n)
  lower = ('a'..'z').to_a.join
  upper = ('A'..'Z').to_a.join
  string.tr(lower + upper, lower[n..-1] + lower[0...n] + upper[n..-1] + upper[0...n])
end

p foo('XYZ', 1) # "YZA"
p foo('ABC', 1) # "BCD"
p foo('ABC', 3) # "DEF"

比较慢,但是...

关于ruby - 在ruby中按整数递增字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49589300/

相关文章:

ruby - 为什么我的类(class)不在 ruby 中工作?

ruby-on-rails - Gitlab ci安装报错

ruby-on-rails - 将resque连接到其他键值数据库而不是redis?

java - Jruby 嵌入式模块和类

ruby-on-rails - 用于构建成就系统的 Ruby/Rails 现代工具

ruby - Ruby 中的 block 绑定(bind)

ruby-on-rails - ActionMailer 响应 "501 5.5.4 Invalid argument"

ruby-on-rails - Rails 获取 root_url 错误

ruby - 在 Ruby 中重新格式化一串数字

ruby - Docker Ruby Bundler未安装