简单的数学表达式从左到右解决了目标c

nec*_*ixy 4 iphone math objective-c

我只是在目标c NSString中有这个表达式:@"10 + 5*2".我想自动解决这个表达式并遇到一个解决方案:

UIWebView *webView = [[UIWebView alloc] init];
NSString *result = [webView stringByEvaluatingJavaScriptFromString:expression];
NSLog(@"%@",result); 
Run Code Online (Sandbox Code Playgroud)

上面工作得很好,但它产生了一个结果:20.实际上这评估"*"首先意味着首先它做5*2 = 10 + 10.但我想删除这个优先级并且只想让每个运算符具有相同的优先权正确,这样答案可能是10 + 5 = 15*2 = 30.

虽然编写自己的函数是最后一个选项,但我真的不想搞乱字符串函数.我想用内置的东西.

谢谢,

*******工作方案********

感谢您对Eiko和Ozair的所有帮助!基于他们的答案,我写了这一堆代码,对我来说非常合适!

NSString *expression = lblBox.text; // Loads the original expression from label.
    expression = [expression stringByReplacingOccurrencesOfString:@"+" withString:@")+"];
    expression = [expression stringByReplacingOccurrencesOfString:@"-" withString:@")-"];
    expression = [expression stringByReplacingOccurrencesOfString:@"*" withString:@")*"];
    expression = [expression stringByReplacingOccurrencesOfString:@"/" withString:@")/"];


    NSUInteger count = 0, length = [expression length];
    NSRange range = NSMakeRange(0, length); 

    while(range.location != NSNotFound)
    {
        range = [expression rangeOfString: @")" options:0 range:range];
                 if(range.location != NSNotFound)
                 {
                     range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
                     count++; 
                 }
    }

    for (int i=0; i<count; i++) {
        expression = [@"(" stringByAppendingString:expression];
    }


    UIWebView *webView = [[UIWebView alloc] init];
    NSString *result = [webView stringByEvaluatingJavaScriptFromString:expression];
    [webView release];
    NSLog(@"%@ = %@",expression, result);
Run Code Online (Sandbox Code Playgroud)

Eik*_*iko 6

不确定它是否与@Ozair相同Kafray说......

对于附加到字符串的每个运算符,添加)第一个并(在开头添加匹配.即

10
(10 ) +
(10 ) + 5
((10 ) + 5 ) *
((10 ) + 5 ) * 2
Run Code Online (Sandbox Code Playgroud)

只需确保在删除操作符时也删除括号.