iOS DDMathParser获取数字'块'

时间:2013-01-19 18:34:35

标签: ios nsstring numbers expression calculator

我正在使用DDMathParser为iOS构建计算器应用程序。 我想知道如何将NSString这样的表达式(5+900/32)分成各个数字值:590032 我希望我在NSArray或其他相对有用的列表对象中获取这些内容。我听说有一种简单的方法可以使用DDMathParser执行此操作 - 这就是我从GCMathParser切换的原因。

1 个答案:

答案 0 :(得分:1)

DDMathParser作者在这里。

是的,这很容易,有几种方法可以解决。如果您只是想要数字而不关心运算符,可以使用tokenizing API:

NSError *tokenizingError = nil;
DDMathStringTokenizer *tokenizer = [DDMathStringTokenizer tokenizerWithString:@"5+900/32" error:&tokenizingError];
NSArray *tokens = [tokenizer tokens];

NSMutableArray *numbers = [NSMutableArray array];
for (DDMathStringToken *token in tokens) {
  if ([token tokenType] == DDTokenTypeNumber) {
    [numbers addObject:[token numberValue]];
  }
}

// numbers now is @[ @5, @900, @32 ];

然而,这种方法有一个警告,最好用这个例子说明:@"-42"。 DDMathParser中的标记始终被解析为 unsigned 数字,因为前面的减号实际上是一个运算符,并且根据其他运算符的不同应用。这意味着如果您对字符串@"-42"进行标记,您将看到它包含两个标记:否定运算符和数字42。