【发布时间】:2013-05-23 01:26:00
【问题描述】:
有没有办法解决ios中的字符串方程?
例如
输入:
NSString * str =@"1+2";
输出:
NSInteger result = 3 // 即来自str的1+2之和
如何解决这个问题并获得预期的结果!
请帮忙!
【问题讨论】:
标签: ios objective-c ios5 nsstring nsinteger
有没有办法解决ios中的字符串方程?
例如
输入:
NSString * str =@"1+2";
输出:
NSInteger result = 3 // 即来自str的1+2之和
如何解决这个问题并获得预期的结果!
请帮忙!
【问题讨论】:
标签: ios objective-c ios5 nsstring nsinteger
您可以做的是,您可以使用此方法获取由符号“+”分隔的字符串的组件,然后您将获得组件数组,即 1,2。
NSArray* foo = [str componentsSeparatedByString: @"+"];
int result = [[foo objectAtIndex:0] integerValue] + [[foo objectAtIndex:1] integerValue];
然后您可以使用这两个元素的整数值并将它们相加并将结果存储在整数变量中。
【讨论】:
* 而不是+,你会怎么做??
您可以为此使用 NSExpression:
NSExpression *expression = [NSExpression expressionWithFormat:@"1+2"];
NSLog(@"%@", [expression expressionValueWithObject:nil context:nil]);
有关更多信息,请阅读所用方法的文档。
【讨论】:
使用这个:
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
希望对你有帮助。
【讨论】:
如果您的数学表达式足够简单,您可以按照 Rajan Balana 的建议走手动路线。
要评估更复杂的表达式,您可以将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 的数学解析器。我自己没用过,不过好像比较流行的
【讨论】:
我认为您需要 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);
【讨论】:
取决于输入字符串方程的复杂性。您可以使用Shunting-yard algorithm 解析数学方程,然后从Abstract Syntact Tree (AST) 计算方程
但我希望您正在寻找一些简单的,最好是已经完成的解决方案。在这种情况下,您可以尝试其中的一种(不能保证,我没有尝试过,只是在谷歌上搜索过):
【讨论】: