我想知道如何评估方程的字符串表示,就像它是一个真实的方程式一样:
if(@"15+14==23")
{
//True statement...
}
else
{
//False statement....
}
我想返回“false”,因为15 + 14不等于23.我怎样才能让它工作?
答案 0 :(得分: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
。
答案 1 :(得分:3)
所以,这是一个我认为比链接问题复杂得多的问题(虽然问题是要求一个“简单的”方程解析器)。
幸运的是,我认为这是一个非常有趣的问题,并且已经为您编写了一个:DDMathParser
。
它有一个good amount of documentation,包括how to add it to your project和high overview of its capabilities之类的内容。它支持all of the standard mathematical operators,包括逻辑和比较运算符(||
,&&
,==
,!=
,<=
等。
在你的情况下,你会做这样的事情:
NSNumber *result = [@"15+14 == 23" numberByEvaluatingString];
if ([result boolValue] == YES) {
....True statement....
} else {
.....False statement.....
}
作为一个提醒,DDMathParser
根据MIT许可提供,这要求您在使用它的任何内容中包含版权信息和许可的全文。
答案 2 :(得分: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);