7

我想知道如何评估一个方程的字符串表示,就好像它是一个真正的方程:

if(@"15+14==23")
{
    //True statement...
}
else
{
    //False statement....
}

我想返回“false”,因为 15+14 不等于 23。我怎样才能让它工作?

4

3 回答 3

7

这是一个如何使用的示例NSPredicate

NSPredicate *p = [NSPredicate predicateWithFormat:@"1+2==3"];
NSLog(@"%d", [p evaluateWithObject:nil]);
p = [NSPredicate predicateWithFormat:@"1+2==4"];
NSLog(@"%d", [p evaluateWithObject:nil]);

第一个NSLog产生1因为1+2==3是真的;第二个产生0

于 2011-12-23T16:04:53.680 回答
3

所以,我认为这是一个比链接问题更复杂的问题(尽管问题是要求一个“简单”的方程解析器)。

对你来说幸运的是,我认为这是一个非常有趣的问题,并且已经为你写了一个:DDMathParser.

它有大量的文档,包括如何将它添加到您的项目中以及对其功能的高度概述。它支持所有标准的数学运算符||包括逻辑运算符和比较运算符( 、、、、、等)。&&==!=<=

在你的情况下,你会做这样的事情:

NSNumber *result = [@"15+14 == 23" numberByEvaluatingString];
if ([result boolValue] == YES) {
  ....True statement....
} else {
  .....False statement.....
}

请注意,DDMathParser它是在 MIT 许可下提供的,它要求您在使用它的任何内容中包含版权信息和许可的全文。

于 2011-12-23T16:25:53.933 回答
0
NSString *equation = @"15+14==29";


NSPredicate *pred = [NSPredicate predicateWithFormat:equation];

NSExpression *LeftExp = [pred leftExpression];

NSExpression *RightExp = [pred rightExpression];    


NSNumber *left = [LeftExp expressionValueWithObject:nil context:nil];

NSNumber *right = [RightExp expressionValueWithObject:nil context:nil];


if ([left isEqualToNumber:right]) {
    NSLog(@"yes left is equal to right");
}
else{
    NSLog(@"yes left is NOT equal to right");

}

NSLog(@"left %@", left); 

NSLog(@"right %@", right); 
于 2011-12-23T16:40:37.640 回答