7

方程式の文字列表現を実際の方程式であるかのように評価する方法を知りたいです。

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

15+14 は 23 に等しくないため、「false」を返したいのですが、これを機能させるにはどうすればよいですか?

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]);

最初のものは、なぜならis trueNSLogを生成します。2 番目は を生成します。11+2==30

于 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 に答える