C++实用案例:整数四则运算计算器
前言
很多学习C++的人都想过要编一个计算器吧,有可能你没有想过,但你肯定对这个感兴趣。如果你再CSDN上搜一下,出来的一定是双栈啊,class啊什么的,因此你看不懂,所以你感觉没必要copy下来,因为自己不会。那这期我会带大家深度剖析用简单的字符串就能解决的整数四则运算计算器。
一、整体框架
①思路框架
一个合格的计算器,就必须有处理多项式的功能,那么我们遇到一个多项式,会怎么算呢?比如:3 * 3 + 2 / 2 * 5 - 4 * 10 / 5.
首先,我们应该想到的是将多项式化为单项式,也就是以+ -为分界线:
比如:3*3 + 2/2*5 + 4*10/5
然后依次算出:
比如:9 + 5 + 8
最后求和:
比如:22
②代码框架
代码框架大概是这样的:我们用math函数算单项式,main分离多项式。
#include<......> using namespace std; int math(string n){算单项式;(分离各位) } int main(){分离多项式;依次调用math()输出ans; }
二、 自定义函数math详解
刚刚我们了解到要用一个自定义math函数来求一个单项式的值,那我们来具体分析一下:
在程序中计算一个单项式,该怎么做呢?
设这个字符串变量名为a,则:
char now='*'; string s; for(int i=0;i<a.size();i++){if(当前一位是符号){统计目前s的数据,并根据now做相应的运算,然后清零,并统计当前符号至now}else{//当前一位是数字统计这一位的数据,加到字符串s中} }
于是,我们补全代码,就是:
int math(string a){//计算单项式头文件stringstream ss;//定义字符串流ss string num;//定义字符串类型变量num int num_;//定义整数类型变量num_ int ans=1;//定义整数类型变量ans并初始化赋值为1 char now='*';//定义字符类型变量* for(int i=0;i<a.size();i++){//分析if(a[i]=='*'||a[i]=='/'){//如果当前是符号位 ss<<num;//导入至ssss>>num_;//导出至num_ if(now=='*'){//如果之前统计的符号位是* ans*=num_;//*前一个项 }else{//否则 ans/=num_;///前一个项 }ss.clear();//清空ss流 num="";//清空num now=a[i];//获取当前符号位 }else{//如果当前为数字位 num+=a[i];//统计当前数字位 }}ss<<num;//导入至ssss>>num_;//导出至num_ if(now=='*'){//如果之前统计的符号位是* ans*=num_;//*前一个项 }else{//否则 ans/=num_;///前一个项 }ss.clear();//清空ss流 num="";//清空num return ans;//返回ans }
怎么样,学费了还是学会了?我们继续来看下一部分吧!
三、main函数详解
在main()函数里,重要的任务就是分离多项式,其实也很简单,以加,减符号为间隔就行,再注意一下细节就可以。
main代码:
int main(){//主函数开始string s;//定义字符串类型变量sint ans_all=0;//定义整数类型变量ans_all string num;//定义字符串类型变量num cin>>s;//输入s的值char now='+';//定义字符类型变量now并初始化赋值为+ for(int i=0;i<s.size();i++){//分离单项式if(s[i]=='+'||s[i]=='-'){//如果当前位为+-符号if(now=='+'){//如果之前统计的是+ ans_all+=math(num);//就加 num="";//清除num }else{//否则 ans_all-=math(num);//减 num="";//清除num }now=s[i];//统计符号 }else{//否则 num+=s[i];//统计数字位 }}if(now=='+'){//如果之前统计的是+ ans_all+=math(num);//加 num="";//清空,可省 }else{//否则 ans_all-=math(num);//减 num="";//清空,可省 }cout<<ans_all;//输出ans_all return 0;//主函数结束,返回0 }
四、完整AC代码
#include<iostream>//调用输入输出流头文件
#include<string>//调用字符串流头文件
#include<cstdio>//调用C语言输入输出头文件
#include<sstream>//调用字符串流头文件
using namespace std;//使用标准名字空间
int math(string a){//计算单项式头文件stringstream ss;//定义字符串流ss string num;//定义字符串类型变量num int num_;//定义整数类型变量num_ int ans=1;//定义整数类型变量ans并初始化赋值为1 char now='*';//定义字符类型变量* for(int i=0;i<a.size();i++){//分析if(a[i]=='*'||a[i]=='/'){//如果当前是符号位 ss<<num;//导入至ssss>>num_;//导出至num_ if(now=='*'){//如果之前统计的符号位是* ans*=num_;//*前一个项 }else{//否则 ans/=num_;///前一个项 }ss.clear();//清空ss流 num="";//清空num now=a[i];//获取当前符号位 }else{//如果当前为数字位 num+=a[i];//统计当前数字位 }}ss<<num;//导入至ssss>>num_;//导出至num_ if(now=='*'){//如果之前统计的符号位是* ans*=num_;//*前一个项 }else{//否则 ans/=num_;///前一个项 }ss.clear();//清空ss流 num="";//清空num return ans;//返回ans
}
int main(){//主函数开始string s;//定义字符串类型变量sint ans_all=0;//定义整数类型变量ans_all string num;//定义字符串类型变量num cin>>s;//输入s的值char now='+';//定义字符类型变量now并初始化赋值为+ for(int i=0;i<s.size();i++){//分离单项式if(s[i]=='+'||s[i]=='-'){//如果当前位为+-符号if(now=='+'){//如果之前统计的是+ ans_all+=math(num);//就加 num="";//清除num }else{//否则 ans_all-=math(num);//减 num="";//清除num }now=s[i];//统计符号 }else{//否则 num+=s[i];//统计数字位 }}if(now=='+'){//如果之前统计的是+ ans_all+=math(num);//加 num="";//清空,可省 }else{//否则 ans_all-=math(num);//减 num="";//清空,可省 }cout<<ans_all;//输出ans_all return 0;//主函数结束,返回0
}
总结
今天就到这里了,大家再见,这是我原创的,来之不易,好好理解一下吧。
C++实用案例:整数四则运算计算器相关推荐
- c# 算式 计算器_C#实现的简单整数四则运算计算器功能示例
C#实现的简单整数四则运算计算器功能示例 发布时间:2020-08-24 00:11:14 来源:脚本之家 阅读:131 本文实例讲述了C#实现的简单整数四则运算计算器功能.分享给大家供大家参考,具体 ...
- 二叉树实现四则运算计算器(含源码演示和详细说明)
说明:禁止转载,对源码的要求是禁止把这个东西原封不动或非常小量改动后用于课程设计(我很建议你自己动手实现,你会做的比我更好),源码仅供学习参考,思路仅供参考,仍有不足,欢迎评论指出. 1.问题定义及需 ...
- Python四则运算“计算器”——整数口算练习“小程序”
设定练习题目数量.最大取值整数数,即时判定,答对鼓励答错打印正确结果. [学习的细节是欢悦的历程] Python 官网:https://www.python.org/ Free:大咖免费"圣 ...
- c语言整数四则运算表达式的输出格式控制,四则运算
网页简易四则运算器2021-05-18 22:35:40 下载地址:https://download.csdn.net/download/qq_31293575/18340399 项目介绍 Calcu ...
- python实现简单的四则运算_Python实现简单的四则运算计算器
一.算法 1.算法的主要思想就是将一个中缀表达式(Infix expression)转换成便于处理的后缀表达式(Postfix expression),然后借助于栈这个简单的数据结构,计算出表达式的结 ...
- 练习:Python 的字符串处理, 一个朴实无华的四则运算计算器,批量计算小学生四则运算表达式
Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基础那么简单-- My CS ...
- 四则运算计算器c语言设计报告,8位四则运算计算器设计报告[五篇]
单片机应用课程设计报告 设计题目 姓 名 学 号 年 级 专 业 指导教师 考核成绩 8位四则运算计算器 胡成.柏壮壮.王庆安.杜威.孙润 Z1141410 7.Z11414039 Z1141407 ...
- 求一个整数的权重 c语言,Code Kata:大整数四则运算—乘法 javascript实现
上周练习了加减法,今天练习大整数的乘法运算. 采取的方式同样为竖式计算,每一位相乘后相加. 乘法函数: 异符号相乘时结果为负数,0乘任何数都为0 需要调用加法函数 因为输入输出的为字符串,需要去除字符 ...
- python编程求圆的面积案例_Python实用案例编程入门:第七章 调式手段
本章的主题为调试手段,这是程序开发必不可少的步骤,也是占用时间最多的环节.在程序员的正常开发工作中,调试工作至少占据1/3的时间,而实际编码工作相对占用实际比较少.因此,无论您是初学者,还是编程兴趣爱 ...
最新文章
- 程序员之路──如何学习C语言并精通C语言
- 如何在c语言中源文件调用另一个源文件的函数
- linux部署项目路径如下
- EntityFramework的安装
- Hbase RegionServer 启动失败 Time difference of xxx ms max allowed of 30000ms
- 复制密钥文件到另一台服务器,使用所有ssh密钥从第三台服务器在两台服务器之间远程复制...
- OpenCV3.4.3DNN 模块中sample-colorization、Easy-textdetector、openpose
- Requests redirect
- 由数据库连接池想到的----处理他人未释放的资源
- 【图像分割】基于matlab GUI FCMKFCM MRI图像分割【含Matlab源码 582期】
- Java JSON转Excel工具类
- AMSim高级系统建模与仿真软件安装坡姐过程的踩坑心得
- FastDFS上传下载原理解析
- linux源码编译ipk,OpenWrt-SDK-编译生成ipk软件包
- 单模光纤最大传输距离为多少_单模光纤传输距离是多少?
- 【20保研】华东师范大学计算机科学与软件工程学院第五届“高可信软件工程优秀大学生夏令营”活动通知...
- app开发大致流程介绍(给非专业人士通俗易懂的明白):
- 2022-03-25 redis哨兵处理failover
- FlightGear编译小结
- surface go升级win11