从字符串中取出两个数字时出错

时间:2014-03-19 20:07:30

标签: string lua lua-patterns

我正在和Lua一起试图制作一个使用字符串操作的计算器。基本上我从字符串中取出两个数字,然后对它们做一些事情(+ - * /)。我可以成功地从x中取出一个数字,但从y中取出一个数字始终会返回nil。有人可以帮忙吗?

local x = "5 * 75"

function calculate(s)
    local x, y =
    tonumber(s:sub(1, string.find(s," ")-1)),
    tonumber(s:sub(string.find(s," ")+3), string.len(s))
    return x * y
end

print(calculate(x))

1 个答案:

答案 0 :(得分:3)

你有一个简单的错位括号,将string.len发送到tonumber而不是sub。

local x, y =
tonumber(s:sub(1, string.find(s," ")-1)),
tonumber(s:sub(string.find(s," ")+3, string.len(s)))

你实际上并不需要string.len,因为如果没有给出,则字符串的结尾是sub的默认值。

编辑: 实际上,你可以通过使用string.match来做你想做的事情。

local x,y = string.match(s,"(%d+).-(%d+)")

匹配查找尝试将字符串与给定的模式匹配,并返回捕获的值,在本例中为数字。此模式转换为"一个或多个数字,然后尽可能少的任何字符,然后一个或多个数字"。 %d是1位数,+表示一个或多个。 。意味着任何性格和 - 意味着尽可能少。将捕获括号内的值,这意味着它们将被返回。