我想问我如何将用户插入的字符串转换为数学方程,以便xCode能够理解。
例如,如果用户在文本字段中输入以下内容。"2*sin(2*M_PI*t)“,其中方程式中的"t”是代码中的变量,Xcode可以理解方程式,如下所示
双重应答= 2*sin(2*M_PI*t);
非常感谢Kin
发布于 2012-03-21 01:03:34
只需使用标准的可可类就可以做到这一点,但是语法变得有些荒谬,而且设置的数量也是惊人的。
@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
以及如何使用类别来绕过它。发布于 2012-03-21 00:26:54
最好的选择是使用像DDMathParser这样的数学解析器。
它允许变量替换,并具有内置常量。
https://stackoverflow.com/questions/9796938
复制相似问题