Objective-C计算字符串值

时间:2011-05-20 13:15:19

标签: objective-c nsstring int nslog

这是我的主要内容:

int x=0;
NSString *new=[[NSString alloc]initWithString:@"9+4"];
x=[new intValue];
NSLog(@"hi %i",x);

这导致9 ..。因为给出字符串的intValue将只读取数字并在字符不是数字时停止。

那么如何打印我的字符串的结果并获得13呢?

5 个答案:

答案 0 :(得分:8)

实际上,NSExpression就是为此而做的:

NSExpression *expression = [NSExpression expressionWithFormat:@"9+4"];
// result is a NSNumber
id result = [expression expressionValueWithObject:nil context:nil];

NSLog(@"%@", result);

NSExpression非常强大,我建议您仔细阅读。您可以通过格式字符串传入对象来使用变量。

答案 1 :(得分:0)

您必须手动解析它。您可以编写一个NSString的子类来覆盖intValue方法,并解析它以查找算术符号并执行数学计算,但这很接近自动,因为您会害怕我害怕

答案 2 :(得分:0)

您需要自己解析和评估,因为看似简单的计算超出了Apple为您提供的基本字符串解析范围。如果你习惯于解释像Ruby,Perl等类似的语言,那似乎是不费吹灰之力的。但是对于编译语言,对表达式的运行时评估的支持是不常见的(有些语言支持它们,但Objective-C不是其中之一)。

答案 3 :(得分:0)

更改此行

NSString *new=[[NSString alloc]initWithString:@"9+4"];

NSString *new=[NSString stringWithFormat:@"%f",9+4];

答案 4 :(得分:0)

尝试解析字符串中的表达式时,您需要使用Reverse Polish NotationHere is the first example我在谷歌搜索Objective-C时突然发现。