如何在Ruby中汇总str和num?
并再次返回字符串
以某种方式保留字符串开头的零。
示例:
str = "001"
num = 3
预期结果:
str + num #=> "004"
答案 0 :(得分:4)
如果你不介意修改str
,你可以这样做:
3.times { str.next! }
str #=> "004"
如果您不想修改str
,请操作str.dup
。
可替换地:
3.times.reduce(str) { |s,_| s.next }
str #=> "004"
不会改变str
。
我知道你在想什么:这不是很有效。
编辑加入斯特凡的第一个建议。最初我也实施了他的第二个建议,但我已经回到next
和next!
。我认为next
读取的内容比succ
更好,而且它们显然是方法,所以我并不担心它们会与next
关键字混淆。
答案 1 :(得分:1)
使用to_i
将str
转换为整数,向其添加num
,然后将生成的整数转换为to_s
的字符串。零填充使用rjust()
完成。
str = "001"
num = 3
(str.to_i + num).to_s.rjust(3, '0')
=> "004"
答案 2 :(得分:0)
def sum_string(string, number)
return string.scan(/^0*/)[0]+(string.to_i+number).to_s
end
puts sum_string("00030", 5)
puts sum_string("00006", 7)
returns 000013 which is adding one more zero at the beginning
所以,这是一个小小的改进
def sum_string(string, number)
len = (string.scan(/^0*/)[0]+(string.to_i+number).to_s).length - string.length
if len > 0 then
return string.scan(/^0*/)[0][len..-1]+(string.to_i+number).to_s
else
return string.scan(/^0*/)[0]+(string.to_i+number).to_s
end
end