我想知道如何评估一个方程的字符串表示,就好像它是一个真正的方程:
if(@"15+14==23")
{
//True statement...
}
else
{
//False statement....
}
我想返回“false”,因为 15+14 不等于 23。我怎样才能让它工作?
我想知道如何评估一个方程的字符串表示,就好像它是一个真正的方程:
if(@"15+14==23")
{
//True statement...
}
else
{
//False statement....
}
我想返回“false”,因为 15+14 不等于 23。我怎样才能让它工作?
这是一个如何使用的示例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
。
所以,我认为这是一个比链接问题更复杂的问题(尽管问题是要求一个“简单”的方程解析器)。
对你来说幸运的是,我认为这是一个非常有趣的问题,并且已经为你写了一个:DDMathParser
.
它有大量的文档,包括如何将它添加到您的项目中以及对其功能的高度概述。它支持所有标准的数学运算符,||
包括逻辑运算符和比较运算符( 、、、、、等)。&&
==
!=
<=
在你的情况下,你会做这样的事情:
NSNumber *result = [@"15+14 == 23" numberByEvaluatingString];
if ([result boolValue] == YES) {
....True statement....
} else {
.....False statement.....
}
请注意,DDMathParser
它是在 MIT 许可下提供的,它要求您在使用它的任何内容中包含版权信息和许可的全文。
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);