Sum Number String和Integer并将零保留在字符串的开头

时间:2015-02-27 03:38:29

标签: ruby

如何在Ruby中汇总str和num?
并再次返回字符串 以某种方式保留字符串开头的零。

示例:

str = "001"  
num = 3

预期结果:

str + num #=> "004"

3 个答案:

答案 0 :(得分:4)

如果你不介意修改str,你可以这样做:

3.times { str.next! }
str #=> "004"

如果您不想修改str,请操作str.dup

可替换地:

3.times.reduce(str) { |s,_| s.next }
  str #=> "004"

不会改变str

我知道你在想什么:这不是很有效。

编辑加入斯特凡的第一个建议。最初我也实施了他的第二个建议,但我已经回到nextnext!。我认为next读取的内容比succ更好,而且它们显然是方法,所以我并不担心它们会与next关键字混淆。

答案 1 :(得分:1)

使用to_istr转换为整数,向其添加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