【问题标题】:convert an input string to an integer将输入字符串转换为整数
【发布时间】:2016-07-09 06:11:10
【问题描述】:

我需要使用 get_integer_from_string() 函数将输入字符串转换为整数。
我正在使用红宝石 我有这个时间表。

根据我们需要从base 7转换到base 10的时间表

请注意: 1- 如果遇到没有数字序列的字符串,它应该返回零 (0)。

2- 字符串可以在构成整数的字符之后包含其他字符,这些字符将被忽略并且对该函数的行为没有影响。

感谢您帮助我完成作业。

【问题讨论】:

  • 这不是base 6系统,是base 7。你知道如何在base之间转换数字吗?
  • @TimPietzcker 实际上现在我还是红宝石的新手,谢谢

标签: ruby string integer decimal


【解决方案1】:

正如 Tim 上面指出的,您的表格显示基数 7,而不是 6。String#to_iFixnum#to_s 都采用可选的基数(基数)参数:

p "020".to_i(7)
# => 14
p 14.to_s(7)
# => "20"

为了处理不是 0-6 的尾随字符,String#slice(又名String#[])效果很好:

expr = /^[0-6]*/

p "72"[expr].to_i(7)
# => 0
p "0202xyz"[expr].to_i(7)
# => 100
p "27"[expr].to_i(7)
# => 2

【讨论】:

  • 关于问题的第 2 部分,"020cat".to_i(7) #=> 14,还有"72".to_i(7) #=> 0,因为基数 7 不使用数字 7(或 8 或 9),所以这与 "x2".to_i(7) #=> 0 没有什么不同。
  • @CarySwoveland 和 "27".to_i(7) 显然是 2
【解决方案2】:

您要做的是将字符串(表示以 7 为基数的数字)转换为以 10 为基数的整数。这可以通过

"021".to_i(7)
# => 15

to_i() 方法请参见Ruby String 类的Documentation

【讨论】:

  • @Steve def get_integer_from_string(str) return 0 if (/^(?\d+)$/ =~ str).nil?结果 = 0 str.reverse.each_char.with_index 做 |char, index| tmp = char.to_i * 7**index result += tmp end result rescue 0 end
【解决方案3】:

我做了这个不确定是否正确

def get_integer_from_string(str)
  return 0 if (/^(?<num>\d+)$/ =~ str).nil?
  result = 0
  str.reverse.each_char.with_index do |char, index|
    tmp = char.to_i * 7**index
    result += tmp
  end
  result rescue 0
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    相关资源
    最近更新 更多