の文字列方程式を解く方法はありios
ますか?
例えば
入力:
NSString * str =@"1+2";
出力:
NSInteger result = 3
// つまり、1+2 の合計str
これをどのように実行し、期待される結果を得るか!
助けてください!
の文字列方程式を解く方法はありios
ますか?
例えば
入力:
NSString * str =@"1+2";
出力:
NSInteger result = 3
// つまり、1+2 の合計str
これをどのように実行し、期待される結果を得るか!
助けてください!
これには NSExpression を使用できます。
NSExpression *expression = [NSExpression expressionWithFormat:@"1+2"];
NSLog(@"%@", [expression expressionValueWithObject:nil context:nil]);
詳細については、使用されているメソッドのドキュメントを参照してください。
数式が十分に単純な場合は、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 つを使用できます。私自身は使っていませんが、人気のあるものは
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);
あなたができることは、このメソッドを使用して記号「+」で区切られた文字列のコンポーネントを取得でき、コンポーネントの配列、つまり1,2を取得できることです。
NSArray* foo = [str componentsSeparatedByString: @"+"];
int result = [[foo objectAtIndex:0] integerValue] + [[foo objectAtIndex:1] integerValue];
次に、これら 2 つの要素に整数値を使用してそれらを加算し、結果を整数変数に格納できます。