2

以下のように複数の条件が指定された NSString オブジェクトがあります。

NSString *strFormula1 = @"\"man\" == \"man\" && 1<5 || 12<9";
NSString *strFormula2 = @"\"pac@pac.com\" == \"pac1@pac1.com\" || 9==9 && 8>2 || 2==2";

NSString オブジェクトで指定された数式を実行し、BOOL として答えを見つけたいです。指定された条件が True または False を返すかどうか。

前もって感謝します:)

4

3 に答える 3

4

次のように使用しNSPredicateてください:

NSString *strFormula1 = @"\"man\" == \"man\" && 1<5 || 12<9";
NSString *strFormula2 = @"\"pac@pac.com\" == \"pac1@pac1.com\" || 9==9 && 8>2 || 2==2";
NSString *strFormula3 = @"\"hello\" == \"world\"";

NSPredicate *predicate = [NSPredicate predicateWithFormat:strFormula1];
BOOL result = [predicate evaluateWithObject:nil]; //True

predicate = [NSPredicate predicateWithFormat:strFormula2];
result = [predicate evaluateWithObject:nil]; //True

predicate = [NSPredicate predicateWithFormat:strFormula3];
result = [predicate evaluateWithObject:nil]; //False

そして、述語が式をどのように解析したかを知りたい場合は、次を使用してください。

NSLog(@"%@", [predicate predicateFormat]);

私たちの場合、これは次を返します:

("man" == "man" AND 1 < 5) OR 12 < 9 //1st Expression
"pac@pac.com" == "pac1@pac1.com" OR (9 == 9 AND 8 > 2) OR 2 == 2 //2nd Expression
"hello" == "world" //3rd Expression
于 2012-06-09T08:41:38.027 に答える
1

式パーサーと評価器が必要です。

これを試してください: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm

于 2012-06-09T08:10:21.793 に答える
0

メソッドとキャストの組み合わせを使用する必要があります。

最初のフォーラムは次のようになります。

if([@"\"man\"" isEqualToString:@"\"man\""] && 1 < 5 || 12 < 9) {
        //Forumla == TRUE
 }

述べたように BOOL オブジェクトにキャストしたい場合@rishi

BOOL strFormula1 = [@"\"man\"" isEqualToString:@"\"man\""] && 1<5 || 12<9;

only使用する文字列がある場合は、@qianfg示唆されているように、変数を決定するために何らかの形式の正規表現を使用して整数と文字列の文字列を解析する必要があります。

于 2012-06-09T08:12:38.687 に答える