18

の文字列方程式を解く方法はありiosますか?

例えば

入力:

NSString * str =@"1+2";

出力:

NSInteger result = 3// つまり、1+2 の合計str

これをどのように実行し、期待される結果を得るか!

助けてください!

4

6 に答える 6

32

これには NSExpression を使用できます。

NSExpression *expression = [NSExpression expressionWithFormat:@"1+2"];
NSLog(@"%@", [expression expressionValueWithObject:nil context:nil]);

詳細については、使用されているメソッドのドキュメントを参照してください。

于 2013-05-28T07:16:59.993 に答える
4

数式が十分に単純な場合は、Rajan Balana が提案する手動のルートに進むことができます。

より複雑な式を評価するには、次のブログ投稿で説明されているように、 /abuseNSPredicateを組み合わせて使用​​できます: http://funwithobjc.tumblr.com/post/1553469975/abusing-nspredicateNSExpression

NSPredicate入力が実際に方程式である場合にのみ必要であることに注意してください(右の部分を含む):

NSPredicate* parsedExpression = [NSPredicate predicateWithFormat:@"1+2=x"];
NSExpression* leftPart = [(NSComparisonPredicate*)parsedExpression leftExpression];
NSNumber* evaluatedResult = [leftPart expressionValueWithObject:nil context:nil];
NSLog(@"Expr:%@", evaluatedResult);

適切な解析を行うには、Objective-C 用の数学パーサーの 1 つを使用できます。私自身は使っていませんが、人気のあるものは

于 2013-05-28T07:18:36.893 に答える
0

subString文字列を作成し、各数値を新しいNSstring(integerValue) またはInteger変数に格納する必要があると思います。

例:

NSString *str = @"1+2";
    int x = [[str substringToIndex:1]integerValue];
    int y = [[str substringFromIndex:1]integerValue];
    int z = x+y;
    NSLog(@"Sum === %d",z);
于 2013-05-28T07:19:57.230 に答える
0

あなたができることは、このメソッドを使用して記号「+」で区切られた文字列のコンポーネントを取得でき、コンポーネントの配列、つまり1,2を取得できることです。

NSArray* foo = [str componentsSeparatedByString: @"+"];

int result = [[foo objectAtIndex:0] integerValue] + [[foo objectAtIndex:1] integerValue];

次に、これら 2 つの要素に整数値を使用してそれらを加算し、結果を整数変数に格納できます。

于 2013-05-28T07:14:31.390 に答える