这是我的主要内容:
int x=0;
NSString *new=[[NSString alloc]initWithString:@"9+4"];
x=[new intValue];
NSLog(@"hi %i",x);
这导致9 ..。因为给出字符串的intValue将只读取数字并在字符不是数字时停止。
那么如何打印我的字符串的结果并获得13呢?
答案 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 Notation。 Here is the first example我在谷歌搜索Objective-C时突然发现。