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 的建议走手动路线。

要评估更复杂的表达式,您可以使用/滥用与本博客文章中所述的NSPredicate组合: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 的数学解析器。我自己没有用过,但流行的似乎是

于 2013-05-28T07:18:36.893 回答
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); 

输出:总和 = 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

希望它可以帮助你。

于 2013-05-28T07:17:48.320 回答
0

您可以做的是,您可以使用此方法获取由符号“+”分隔的字符串的组件,然后您将获得组件数组,即 1,2。

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

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

然后您可以使用这两个元素的整数值并将它们相加并将结果存储在整数变量中。

于 2013-05-28T07:14:31.390 回答
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

取决于输入字符串方程的复杂性。您可以使用Shutting-yard 算法来解析数学方程,然后从Abstract Syntact Tree (AST)

但我希望您正在寻找一些简单的,最好是已经完成的解决方案。在这种情况下,您可以尝试其中一种(不保证,我没有尝试过,只是用谷歌搜索):

于 2013-05-28T07:28:11.617 回答