美文网首页iOS Developer
iOS 实现简单计算器功能(带算数优先级)

iOS 实现简单计算器功能(带算数优先级)

作者: KumLight | 来源:发表于2017-05-23 13:16 被阅读0次

闲聊时提到了这个功能,有人觉得用后缀表达式好一些,也有建议用栈处理的。不可否认每种方法都有自己的特点和优势,但作为iOS开发人员,苹果为我们提供了很多方便的API接口,让我有了一个全新的处理思路。
在此整理分享,不足还望指出。


其实核心思路就是 充分的利用NSString 的 componentsSeparatedByString:方法 , 将运算符分隔开,并用递归的方法,逐个计算。

将加减先分割,再分割乘除 ,所以计算式中 将先运算乘除 , 再运算加减 , 进而达到算数优先级的效果。

附参考代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *number = @"2+5*3*2-4+7-9/3";
    NSLog(@"计算器 : %@ = %ld",number,[self calculate:number]);
    
}
- (NSInteger)calculate:(NSString *)number{

    NSInteger sum = 0;
    if ([number containsString:@"+"] ||
        [number containsString:@"-"] ||
        [number containsString:@"*"] ||
        [number containsString:@"/"]) {
        
        if ([number containsString:@"+"]) {
            
            NSArray *array = [number componentsSeparatedByString:@"+"];
            for (NSString *num in array) {
                
                sum += [self calculate:num.copy];
            }
            return sum;
        }
        
        if ([number containsString:@"-"]) {
            NSArray *array = [number componentsSeparatedByString:@"-"];
            sum = [self calculate:array.firstObject];
            for (int i = 1; i < array.count ;i++) {
                NSString *num = array[i];
                sum -= [self calculate:num.copy];
            }
            return sum;
        }
        
        if ([number containsString:@"*"]) {
            NSArray *array = [number componentsSeparatedByString:@"*"];
            sum = 1;
            for (NSString *num in array) {
                
                sum *= [self calculate:num.copy];
            }
            return sum;
        }
        
        if ([number containsString:@"/"]) {
            NSArray *array = [number componentsSeparatedByString:@"/"];
            sum = [self calculate:array.firstObject];
            for (int i = 1; i < array.count ;i++) {
                NSString *num = array[i];
                sum /= [self calculate:num.copy];
            }
            return sum;
        }
        
    }else{
        
        sum = number.integerValue;
    }
    
    return sum;
}

相关文章

  • iOS 实现简单计算器功能(带算数优先级)

    闲聊时提到了这个功能,有人觉得用后缀表达式好一些,也有建议用栈处理的。不可否认每种方法都有自己的特点和优势,但作为...

  • 三个计算器

    第一个计算器 计算器功能:支持算数优先级,支持指数运算 pow(double x,double y) 表示x...

  • 超简单实现iOS列表的索引功能

    超简单实现iOS列表的索引功能 超简单实现iOS列表的索引功能

  • JavaScript制作简单计算器

    JavaScript经典小项目——制作简单的计算器功能使用JS完成一个简单的计算器 功能。实现2个输入框中输入整...

  • 2018-11-10

    简单计算器(JavaScript实现) 功能比较简单,还需完善。 效果: HTML部分:

  • 简单工厂

    使用简单工厂实现一个简单的计算器。 一、新建类Operation: 二、添加算数运算符方法,这里只支持简单的四则运...

  • ios 简单计算器实现

    .h @property (retain,nonatomic)UILabel *label; @property ...

  • iOS开发之设计模式 - 简单工厂模式

    简单工厂模式 简单工厂模式, 解决对象的创建问题,工厂本身包括了多有的方法集合 实现计算器部分功能 swift ...

  • iOS 计算器的实现

    iOS. 计算器的实现 // // ViewController.swift // CalculatorDemo ...

  • 本地推送闹钟功能实现

    本地推送闹钟功能实现 在ios10下使用UserNotifications用本地推送实现闹钟功能,只是实现了简单的...

网友评论

    本文标题:iOS 实现简单计算器功能(带算数优先级)

    本文链接:https://www.haomeiwen.com/subject/xuiwxxtx.html