在Ruby中循环遍历字符串

问题描述 投票:1回答:1

我输入"901000"作为以下方法的参数,我希望它删除最后三个零并返回"901"

def zeros(x)
    str = x.to_s
    i = str.length-1
    while str[i] == "0"
        str = str.delete(str[i])
        i = i-1
    end
    return str
end

但它返回"91"而不是。我无法理解为什么我的代码不起作用。有人可以帮忙吗?

ruby string
1个回答
3
投票

起初,str"901000"i = str.length-15,而str[i]"0"。因此,

str = str.delete(str[i])

相当于

str = "901000".delete("0")

那给你"91"

然后,由i = i-1i变成4str[i](相当于"91"[4])变成nil,而str[i] == 0(相当于nil == 0)变成false。所以循环结束,返回值str,这是"91"


要做你想做的事,一些简单的方法是:

"901000".sub(/0+\z/, "") # => "901"
"901000"[/.*?(?=0+\z)/] # => "901"
© www.soinside.com 2019 - 2024. All rights reserved.