【问题标题】:Convert a string with mathematical expressions into a float将带有数学表达式的字符串转换为浮点数
【发布时间】:2023-03-08 15:23:01
【问题描述】:

文本字段包含数学表达式,例如:12+45-6 是否可以将此字符串转换为数字?

我们可以使用谓词工具吗?

NSString *foo = @"((a*b)/c+(d/5))+15";
// dummy predicate that contains our expression
NSPredicate *pred = [NSPredicate predicateWithFormat:[foo stringByAppendingString:@" == 42"]];
NSExpression *exp = [pred leftExpression];
NSNumber *result = [exp expressionValueWithObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:4], @"a",[NSNumber numberWithInt:7], @"b",[NSNumber numberWithInt:2], @"c",[NSNumber numberWithInt:20], @"d",nil]context:nil];
NSLog(@"%@", result); // logs "33"<br/>

我也发现了这个https://github.com/unixpickle/ANExpressionParser

【问题讨论】:

标签: objective-c cocoa math expression string-parsing


【解决方案1】:

不依赖外部库的一种解决方案是首先将字符串转换为标记序列,然后使用链接到简单堆栈机器上的shunting-yard algorithm 评估表达式。

【讨论】:

  • 谢谢你的帮助^^,你能给一个示例xcode项目的链接吗?
  • 我链接到的页面提供了一个 C 实现。我不知道你会在任何地方找到一个预烘焙的 XCode 项目。如果这听起来太辛苦了(这比快速拼乐高练习要花几个小时的项目),那么您应该使用内置的 JavaScript 引擎,尽管这需要启动网络浏览器控件,相当重量级的解决方案。
【解决方案2】:

是的,当然有可能。

您应该使用堆栈查看中缀到后缀的转换:http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/index.htm

然后研究如何评估 postix 表达式,同样使用堆栈:http://scriptasylum.com/tutorials/infix_postfix/algorithms/postfix-evaluation/index.htm

【讨论】:

  • 谢谢你的帮助^^,你能给一个示例xcode项目的链接吗?
【解决方案3】:

您需要使用解析器解析此输入,然后对其进行评估。我听说有人成功地使用了 muParser,这样你就不用自己写了。看看这个。 http://muparser.sourceforge.net/

【讨论】:

  • 谢谢你的帮助^^,你能给一个示例xcode项目的链接吗?
  • 我希望每个问题都来自一个示例 xcode 项目,哈哈。它是一个 c 库,你将不得不自己弄清楚我的朋友。
【解决方案4】:

是的。阅读“表达式评估”,或使用现成的脚本解释器。 JavaScript 作为 WebView 的一部分可用于所有 iOS 程序。

【讨论】:

  • 有效,但我认为这种简单性不值得糟糕的表现。
  • 谢谢你的帮助^^,你能给一个示例xcode项目的链接吗?
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
相关资源
最近更新 更多