【问题标题】:Objective-C Calculating string valueObjective-C 计算字符串值
【发布时间】:2011-08-29 16:04:07
【问题描述】:

这是我的主要内容:

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

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

那么我怎样才能打印我的字符串的结果并得到一个 13 呢??

【问题讨论】:

  • 如果您正在寻找与我前段时间相同的东西,请查看我关于同一主题的问题的已接受答案,这对我有很大帮助并且效果很好:stackoverflow.com/questions/4969618/…

标签: objective-c nsstring int nslog


【解决方案1】:

其实NSExpression就是为此而生的:

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

NSLog(@"%@", result);

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

【讨论】:

  • 很好的解决方案,但请不要向其他答案发送垃圾邮件:-)
【解决方案2】:

改变这一行

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

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

【讨论】:

  • 首先,我很确定字符串只是一个示例,输入是意外的。其次,我会使用%d%u 序列,%f 用于浮点。
  • 哈,这就是他一直想要的:)
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    您需要自己解析和评估它,因为像这样看似简单的计算超出了 Apple 为您提供的基本字符串解析的范围。如果您习惯于 Ruby、Perl 等解释性语言,这似乎是一件轻而易举的事。但是对于编译型语言来说,对表达式运行时求值的支持并不常见(有些语言确实支持它们,但 Objective-C 不是其中之一)。

    【讨论】:

      【解决方案5】:

      您将不得不手动解析它。您可以编写一个覆盖 intValue 方法的 NSString 的子类,并对其进行解析以查找算术符号并执行数学运算,但这与您将要得到的一样接近自动,恐怕

      【讨论】:

        猜你喜欢
        • 2011-12-20
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-01
        • 2015-02-10
        • 2017-04-19
        • 2015-02-10
        相关资源
        最近更新 更多