广告位联系
返回顶部
分享到

iOS开发实现计算器功能的代码

IOS 来源:转载 作者:秩名 发布时间:2021-10-11 08:39:13 人浏览
摘要

效果图 Masonry 使用数组来自动约束 NSArray *buttonArrayOne = @[_buttonAC, _buttonLeftBracket, _buttonRightBracket, _buttonDivide]; //withFixedSpacing: 每个view中间的间距 //leadSpacing: 左最开始的间距 //tailSpacing:; 右边最后的的间距 [button

效果图

Masonry

使用数组来自动约束

NSArray *buttonArrayOne = @[_buttonAC, _buttonLeftBracket, _buttonRightBracket, _buttonDivide];
    //withFixedSpacing: 每个view中间的间距
    //leadSpacing: 左最开始的间距
    //tailSpacing:; 右边最后的的间距
    [buttonArrayOne mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:15 leadSpacing:15 tailSpacing:15];
    [buttonArrayOne mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(@(selfHeight - (buttonHeight * 5 + 110)));
        make.height.equalTo(@(buttonHeight));
    }];

对最后一行单独处理

[_buttonZero mas_makeConstraints:^(MASConstraintMaker *make) {
       make.left.equalTo(@15);
       make.top.equalTo(@(selfHeight - (buttonHeight + 50)));
       make.width.equalTo(@(buttonWidth * 2 + 15));
       make.height.equalTo(@(buttonHeight));
   }];
   
   [_buttonZero.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
       make.left.equalTo(_buttonOne.titleLabel);
   }];
   //使0的数字对齐

计算部分:

+ (Result)CalculateFor:(char*) formula andLen: (long) length {
    Result result = {0, 0.0f};
    int numberOfDots = 0;
    int index;
    int digitsNum = 0;
    float digits[CALCULATE_MAX_DIGITS];
    memset(digits, 0, sizeof(digits));
    int optNum = 0;
    char operator[CALCULATE_MAX_OPERATOR];
    memset(operator, 0, sizeof(operator));
    int digitNum = 0;
    char digit[CALCULATE_MAX_DIGIT];
    memset(digit, 0, sizeof(digit));
    char *p = formula;
    while (length--) {
        switch (*p) {
            case '+':
            case '-':
            case '*':
            case '/':
                numberOfDots = 0;
                if (0 == digitNum && '-' == *p) {
                    digit[digitNum++] = *p;
                } else {
                    if (-1 == digitNum) {
                        //刚计算过括号,符号前可以没有数字读入
                    } else if (0 == digitNum || CALCULATE_MAX_DIGITS == digitsNum - 1) {
                        result.error = CALCULATE_ERR;
                        return result;
                    } else {
                        digits[digitsNum++] = atof(digit);
                        memset(digit, '\0', sizeof(digit));
                    }
                    digitNum = 0;
                    operator[optNum++] = *p;
                }
                break;

            case '(': {
                char *pointer_son;
                int ExistEnd = 0;
                pointer_son = ++p;
                while(length--) {
                    if ('(' == *p) {
                        ExistEnd--;
                    } else if (')' == *p) {
                        ExistEnd++;
                    }
                    if (1 == ExistEnd) {
                        break;
                    }
                    p++;
                }
                Result result_son = [self CalculateFor:pointer_son andLen:p - pointer_son];
                if (CALCULATE_ERR == result_son.error) {
                    result.error = result_son.error;
                    return result;
                }
                digits[digitsNum++] = result_son.value;
                memset(digit, 0, sizeof(digit));
                digitNum = -1;
                break;
            }
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            case '.':
                digit[digitNum++] = *p;
                if (numberOfDots == 0 && *p == '.') {
                    numberOfDots = 1;
                } else if (numberOfDots == 1 && *p == '.') {
                    result.error = CALCULATE_ERR;
                    return result;
                }
                break;

            default:
                result.error = CALCULATE_ERR;
                return result;

        }
        if (0 == length && 0 < digitNum) {
            digits[digitsNum++] = atof(digit);
            memset(digit, 0, sizeof(digit));
            digitNum = 0;
        }
        p ++;
    }
    if (digitsNum != optNum + 1) {
        result.error = CALCULATE_ERR;
        return result;
    }
    for (index = 0; index < optNum; index ++) {
        if ('*' == operator[index]) {
            digits[index + 1] = digits[index] * digits[index + 1];
            digits[index] = 0;
            operator[index] = '?';
        } else if ('/' == operator[index]) {
            if (digits[index + 1] == 0) {
                result.error = CALCULATE_ERR;
                return result;
            }
            digits[index + 1] = digits[index] / digits[index + 1];
            digits[index] = 0;
            operator[index] = '?';
        }
    }
    for (index = 0; index < optNum; index ++) {
        if ('?' == operator[index]) {
            if (0 == index) {
                operator[index] = '+';
            } else {
                operator[index] = operator[index - 1];
            }
        }
    }
    result.value = digits[0];
    for (index = 0; index < optNum; index ++) {
        if ('+' == operator[index]) {
            result.value += digits[index + 1];
        } else if ('-' == operator[index]) {
            result.value -= digits[index + 1];
        }
    }
    return result;
}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/weixin_52192405/article/details/120642536
相关文章
  • Flutter Widgets之标签类控件Chip介绍

    Flutter Widgets之标签类控件Chip介绍
    Flutter 标签类控件大全ChipFlutter内置了多个标签类控件,但本质上它们都是同一个控件,只不过是属性参数不同而已,在学习的过程中可以将
  • iOS Lotusoot模块化工具应用的动态思路
    下文,写的是 Swift 依赖 OC 库,没有命名空间 组件化的要点-约定 个人觉得 例如,URL 路由的注册,就是把约定的信息,传过去。作为服务。
  • iOS浮点类型精度问题的原因与解决办法
    前言 相信不少人(其实我觉得应该是每个人)都遇到过一个问题,那就是当服务端返回的JSON数据中出现了小数时,客户端用CGFloat去解析时
  • iOS开发实现计算器功能的代码

    iOS开发实现计算器功能的代码
    效果图 Masonry 使用数组来自动约束 NSArray *buttonArrayOne = @[_buttonAC, _buttonLeftBracket, _buttonRightBracket, _buttonDivide]; //withFixedSpacing: 每个view中间的间
  • iOS自定义雷达扫描扩散动画的代码

    iOS自定义雷达扫描扩散动画的代码
    自己自定义了 一个雷达扫描/扩散效果的View。 扫描View 效果如下: 扩散View 效果如下: 自定义的代码如下: 1. RadarView.h #import UIKit/UIKit.h t
  • iOS实现雷达扫描效果

    iOS实现雷达扫描效果
    具体内容如下 #import UIKit/UIKit.h @interface LTIndicatiorView : UIView@property(nonatomic,strong)UIColor *color;@property(nonatomic,assign)float repeatCount;@property(nonatom
  • IOS NSTimeInterval使用案例介绍
    一 ios 获取时间间隔 想在程序开始或者进入某个界面 ,到结束程序或退出某个界面,获取到这个持续时间. 获取到这个时间还需要转化一个
  • IOS WebRTC的实现原理

    IOS WebRTC的实现原理
    它在2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准。 WebRTC的音视频通信是基于P2P,那么什
  • 关于ios配置微信config出现验签失败的问题解决
    在开发中,出现了一个关于微信配置的问题。 使用的开发工具以及开发框架为 uniapp , JSSDK为 jweixin 使用uniapp进行公众号开发,需要在进入
  • iOS实现轮盘动态效果的代码
    一个常用的绘图,主要用来打分之类的动画,效果如下。 主要是iOS的绘图和动画,本来想用系统自带动画实现呢,发现实现不了,用了其他
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计