0

文本字段包含数学表达式,例如: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

4

4 回答 4

2

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

于 2011-07-24T21:47:32.433 回答
1

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

于 2011-07-24T21:51:10.363 回答
0

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

于 2011-07-24T21:47:27.207 回答
0

是的,当然有可能。

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

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

于 2011-07-24T21:51:37.797 回答