有没有办法解决ios
中的字符串方程?
例如
输入:
NSString * str =@"1+2";
输出:
NSInteger result = 3
//即str
如何解决这个问题并获得预期结果!
请帮忙!
答案 0 :(得分:32)
您可以使用NSExpression:
NSExpression *expression = [NSExpression expressionWithFormat:@"1+2"];
NSLog(@"%@", [expression expressionValueWithObject:nil context:nil]);
有关详细信息,请阅读所用方法的文档。
答案 1 :(得分:2)
如果你的数学表达式足够简单,你可以按照Rajan Balana的建议去手动路线。
要评估更复杂的表达式,您可以将{abuse NSPredicate
与NSExpression
结合使用,如本博客文章中所述:http://funwithobjc.tumblr.com/post/1553469975/abusing-nspredicate
请注意,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的数学解析器之一。我自己没有使用它们,但是流行的似乎是
答案 2 :(得分:1)
使用此:
NSString * str =@"1+2";
NSArray *arr = [str componentsSeparatedByString:@"+"];
int sum = 0;
for (int i = 0; i < [arr count]; i++) {
sum += [[arr objectAtIndex:i] intValue];
}
NSLog(@"sum : %d",sum);
输出:sum = 6
您也可以使用NSExpression。
表达式是谓词实现的核心。当调用 expressionValueWithObject:时,将计算表达式,并返回一个值,然后由运算符处理。表达式可以是从常量到方法调用的任何内容。标量应该包含在适当的NSValue类中。
示例:
NSLog(@"sum : %@", [[NSExpression expressionWithFormat:@"1+4"] expressionValueWithObject:nil context:nil]);
Output :- sum : 5
NSLog(@"mulitple : %@", [[NSExpression expressionWithFormat:@"2*4"] expressionValueWithObject:nil context:nil]);
Output :- mulitple : 8
希望它对你有所帮助。
答案 3 :(得分:0)
您可以做的是,您可以使用此方法将字符串的组件分隔符号“+”,然后您将获得组件数组,即1,2。
NSArray* foo = [str componentsSeparatedByString: @"+"];
int result = [[foo objectAtIndex:0] integerValue] + [[foo objectAtIndex:1] integerValue];
然后您可以使用这两个元素的整数值并添加它们并将结果存储在整数变量中。
答案 4 :(得分: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);
答案 5 :(得分:0)
取决于输入字符串方程的复杂性。您可以使用Shunting-yard algorithm解析数学方程式,然后从Abstract Syntact Tree (AST)
但我希望您正在寻找一些简单的,最好已经完成的解决方案。在这种情况下,你可以尝试其中一个(不保证,我没有尝试过,只是谷歌搜索):