我想问一下如何将用户插入的字符串转换为数学公式,以便xCode理解。
例如,如果用户将其输入到文本字段。 “2 * sin(2 * M_PI * t)”,其中等式中的“t”是代码内部的变量,Xcode可以理解等式
双重答案= 2 * sin(2 * M_PI * t);
非常感谢 健
答案 0 :(得分:5)
你可以只使用标准的cocoa类来完成它,但语法有点荒谬,而且设置的数量也是惊人的。
@interface MyExprTest : NSObject
-(void)run;
@end
@implementation MyExprTest
-(void)run {
NSExpression *e = [(NSComparisonPredicate *)[NSPredicate
predicateWithFormat:@"2*FUNCTION(2*PI*$t,'sin')==0"]
leftExpression];
NSMutableDictionary *vars = [NSMutableDictionary
dictionaryWithObjectsAndKeys:
[NSNumber numberWithDouble:0.04], @"t",
nil];
NSLog(@"%@", [e expressionValueWithObject:self context:vars]);
}
-(double)PI {
return M_PI;
}
@end
@interface NSNumber (Trigonometry)
- (NSNumber*)sin;
@end
@implementation NSNumber (Trigonometry)
- (NSNumber*) sin {
double result = sin([self doubleValue]);
return [NSNumber numberWithDouble:result];
}
@end
int main (int argc, const char * argv[]) {
MyExprTest *t = [[MyExprTest alloc] init];
[t run];
return 0;
}
需要注意的几点:
t
变为$t
,以便您可以从vars
词典中引用它M_PI
变得简单PI
;请注意添加的支持方法FUNCTION
和一个类别来解决它。答案 1 :(得分:3)
最好的办法是使用像DDMathParser这样的数学解析器。
它允许变量替换并具有内置常量。