假设字符串为"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/