标识变量并插入用户选择的值



如果我有一个程序需要用户输入一个函数,我如何识别函数中的变量并插入它?例如:

Input X: 3
Input Function: 3x + 3

那么,我将如何隔离 x,或者一般来说,只插入 x 的值?我必须将字符串组件分隔符与 isnan() 一起使用吗?

编辑:

好!我使用它NSExpression.到目前为止,它看起来不错,边缘有点粗糙,但很好。这是我遇到的问题:我一直在尝试不断将产品添加到变量中,因为 for 循环从下限到最高限制。

for eachSum in lowLim...upLim{
        let expression = NSExpression(format: funct)
        var result = (expression.expressionValueWithObject(["x":eachSum], context: nil) as NSNumber).floatValue
        println(result)
        sumArray = sumArray + Int(result)
    }

我有点让自己进入变量名称。这实际上应该是一个总和程序,你知道,用大写的西格玛表示的计算总和。该环路应该穿过每个lowLim并将其插入,然后在到达UpLim时停止。每次,它都会将每个 Sum 的乘积添加到 sumArray。

如果我设置 lowLim = 1upLim = 3并且函数是 3*x,我应该得到 18,但相反,我得到 9。关于如何解决此问题的任何建议?


笔记:

funct = 字符串文本函数的
字段值sumArray = 最终答案

另外,请原谅糟糕的格式和/或添加的额外内容,这些内容可能不需要。


一切都已修复!这个问题,尽管听起来很愚蠢,但我没有考虑到这一点。我不认为我会搞砸这个。我将lowLim出口连接到upLim相同的文本字段。感谢所有帮助过的人。非常好的学习体验。

看起来你在谈论输入数学函数然后评估它们。您必须决定支持哪些操作以及用户输入这些函数必须使用的确切语法。这称为域特定语言或 DSL。

一旦你决定了你的DSL,你就必须为它编写一个简单的解析器。这是一个巨大的话题,可能非常简单,也可能非常复杂,具体取决于您的DSL的简单或复杂程度。

如果您正在寻找一些简单的"开箱即用"解决方案,我什么都不知道,尽管如果它存在,我不会感到惊讶。很可能你将不得不自己滚动。

查看Apple的文档以获取NSScanner。这是一个不错的开始。有些人已经开始为 Swift 开发解析器组合器库。我不会在这里链接到其中任何一个,因为现在还为时过早,但请尝试搜索引擎。

正如Trevör Anne Denise在下面的评论中提到的,NSExpression是另一个很好的起点。(我将深入研究自己。

最新更新