96SEO 2026-02-19 20:50 15
。

UI界面则是通过最近学习的Masonry库来实现的#xff0c;而简单的四则运算内容则是通过栈来实现一个简单的四则运算。
笔者应组内要求简单实现了一个可以完成简单四则运算的计算器程序。
UI界面则是通过最近学习的Masonry库来实现的而简单的四则运算内容则是通过栈来实现一个简单的四则运算。
笔者这里四则运算的思路是一个中缀表达式转后缀表达式的方式然后再通过后缀表达式来进行一个计算然后得到一个结果。
这里中缀表达式转后缀表达式的思路主要参考这篇博客《数据结构》中缀表达式转后缀表达式
这里简单说明一下我们为什么在计算机中要将中缀表达式转换成后缀表达式中缀表达式的顺序是混乱的因为有括号和每个符号优先级的问题而转化成后缀表达式的逻辑就会变得很简单我们只用按照栈中的顺序来进行一个运算就可以了。
中缀表达式转后缀表达式的核心思想其实就是对于我们的运算符的顺序的控制如果遇到右括号的话我们要一直让符号栈一直出栈直到遇到左括号才停止。
遇到操作符的话我们只需要满足下面这个条件就可以了栈为空或者是我们的当前的操作符的优先级大于栈顶元素的操作符时候我们的操作符栈就可以停止出栈了然后给当前读到的操作符入栈。
}这里和上面简单的版本有一点区别这里的还考虑到了一个负数的判别和一个小数点的时候对于我们的数字的一个读取特别判断这里如果是数字或者是一个小数点我们都要继续进行一个读取。
这里我对于负数的处理是将负号存储到我们对应的数字前面因为一个数字如果是负数的话那他的负号是链接在运算符后面的或者链接在左括号后面的。
所以通过一个特判来分辨我们的普通符号减和一个负数的标志。
但是在OC中给出了一个类NSDecimalNumber这个类可以实现一个比较精确的加减乘除下面给出我们使用这个类来实现计算的过程
removeLastObject];NSDecimalNumber*
decimalNumberBySubtracting:num2]];}
decimalNumberByMultiplyingBy:num2]];}
decimalNumberByDividingBy:num2]];}}}if
UI界面采用了Masonry来布局这个界面大致有两个部分组成一个是我们的textField剩下的部分则是我们的按钮部分这里布局我采用了一个for循环来不断创建我们的button并且给这些button赋值对应的tag这样方便我们对于具有不同button的进行一个划分。
buttonWithType:UIButtonTypeRoundedRect];[self
addSubview:button];//button.backgroundColor
forState:UIControlStateNormal];[button
setTitleColor:UIColor.whiteColor
forState:UIControlStateNormal];button.titleLabel.font
systemFontOfSize:37];button.tag
mas_makeConstraints:^(MASConstraintMaker
{make.left.equalTo(self).offset(20);make.top.equalTo(self.textField.mas_bottom).offset(10);make.size.equalTo(80);}];}
mas_makeConstraints:^(MASConstraintMaker
{make.left.equalTo(self).offset(20);make.top.equalTo(preView.mas_bottom).offset(10);make.size.equalTo(80);}];}
mas_makeConstraints:^(MASConstraintMaker
{make.left.equalTo(self).offset(20);make.top.equalTo(preView.mas_bottom).offset(10);make.width.equalTo(170);make.height.equalTo(80);}];}
mas_makeConstraints:^(MASConstraintMaker
{make.left.equalTo(preView.mas_right).offset(10);make.top.equalTo(preView);make.size.equalTo(80);}];}button.layer.cornerRadius
UIColor.darkGrayColor;}}}这部分代码是一个创建button的代码然后根据button的不同tag来分配颜色以及设置对应的位置。
因为采用MVC架构所以我这里将所有给button添加事件的函数都放在了ViewController中。
forControlEvents:UIControlEventTouchUpInside];}
forControlEvents:UIControlEventTouchUpInside];}
action:selector(pressEqual:)forControlEvents:UIControlEventTouchUpInside];NSLog(12);}
forControlEvents:UIControlEventTouchUpInside];}}}这部分实现了一个给button添加事件函数。
这里可以注意一下textfield的adjustsFontSizeToFitWidth属性可以让他根据字符串长度来实现一个自适应字体的效果。
这里笔者对于输入运算符做了限制同时也对我们输入的小数点和左右括号都做了限制。
比方说笔者在一开始只允许我们的负号输入和左括号允许输入别的操作符被设置成无法键入符号的状态。
这部分的逻辑其实比较复杂要考虑的内容也比较多。
比方说判断数字的小数点个数是否符合要求或者是判断多个运算符重叠的情况。
这里我主要把这部分的判断分成了两部分一个是通过一些全局变量来控制一些不合理的输入另一个则是通过判断中缀表达式是否合理来然后返回一个error字符串。
这里我是通过一个dotFlag和numFlag来控制他一个数字只能输入一次小数点从而限制输入。
另一个部分就是我们开始我设置成只可以输入的符号只有负号。
计算器的仿写比较困难的点在于我们需要考虑的问题比较多以及对于字符串的处理需要注意一下。
细节地方比较多。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback