C++实现简易计算器(正则表达式计算)
说明:简单高效的C++代码,实现简易计算器(正则表达式计算),允许小数、括号。但没有表达式正误检验功能,所以测试前请确保式子正确哦
数据结构:栈
示范输入:
((1.5+2.5)*3-4)+5
42/7-(12+3)*0.5
标准输出:
the answer is 13
the answer is -1.5
源代码:
#include <iostream>#include <stack> using namespace std;stack<double> numbers; //存储操作数 stack<char> operations; //存储运算符/* 设定运算符的优先级,其中以'#'作为operations的栈底元素(便于之后操作) */ int priority(char operate) {switch (operate){case '#':case '\n': return 0;case '(':case ')': return 1;case '+':case '-': return 2;case '*':case '/': return 3;} }void calculate(char);int main() {cout << "WELCOME CALCULATOR" << endl << endl<< "input an algebrais expression to calculate or input 'q' to quit" << endl << endl;char command = cin.get();while (command != 'q') {calculate(command);command = cin.get();}return 0; }void calculate(char command) {double num, leftNum, rightNum, result;switch (command){/* 如果输入是数字,则将该double类型的数据存入栈中 */case '0':case'1':case '2':case'3':case '4':case'5':case '6':case'7':case '8':case'9':cin.putback(command);cin >> num;numbers.push(num);break;case '(':case ')':case '+':case '-':case '*':case '/':case '\n':/* 初始化栈底元素为'#'*/if (operations.empty()) operations.push('#');/* 若现在输入的运算符优先级较高或是输入‘(’,则应该存储现在的操作符,不执行之前的运算符 */if (priority(command) > priority(operations.top()) || command == '(')operations.push(command);/* 若之前输入的运算符优先级较高,则之前的运算符应该被执行 */else {while (priority(command) <= priority(operations.top())){/* 当运算符完全实现后,露出栈底元素‘#’,输入“\n”则打印结果 */if (operations.top() == '#' && command == '\n') {result = numbers.top();cout << "the answer is " << result << endl << endl;numbers.pop();operations.pop();break;}/* 当括号内运算符完全实现后,去除括号,读入下一个字符 */else if (operations.top() == '('&&command == ')') {operations.pop();cin >> command;}/* 若非上述两种情况,则完成前一个运算符,即operations.top() */else {rightNum = numbers.top();numbers.pop();leftNum = numbers.top();numbers.pop();switch (operations.top()){case '+':numbers.push(leftNum + rightNum);operations.pop();break;case '-':numbers.push(leftNum - rightNum);operations.pop();break;case '*':numbers.push(leftNum * rightNum);operations.pop();break;case '/':numbers.push(leftNum / rightNum);operations.pop();break;}}}/* 完成前面高优先级的运算后,当前的运算符(除了‘\n’以外)变成最高优先级,所以应存储下来 */if(command!='\n')operations.push(command);}break;} }
转载于:https://www.cnblogs.com/ticktack/p/6659420.html
C++实现简易计算器(正则表达式计算)相关推荐
- FPGA简易计算器 + 工程源码
一.设计要求 利用Altera公司的FPGA做为主控设计一款简易计算器.简易计算器可以计算简单的千位以内加减乘除计算,通过矩阵键盘输入数字及运算符,并将计算结果显示在数码管上. 设计中采用Altera ...
- c语言51单片机计算器,新基于51单片机的简易计算器
<新基于51单片机的简易计算器>由会员分享,可在线阅读,更多相关<新基于51单片机的简易计算器(24页珍藏版)>请在人人文库网上搜索. 1.基于51单片机的简易计算器1.前言: ...
- python表达式计算器_Python正则表达式实现简易计算器功能示例
本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+ ...
- javascript_day03------js学习第三天,关于简易计算器的加减乘除,对于年份判断和日期天数计算,以及if和switch的区分用法,最后是循环。
js的学习很重要,基础知识点要落实.这既离不开日常的练习使用锻炼自己的计算机思维模式,同样的知识点分析总结和整理也是重中之重,不能只懂怎么用却不能明白自己这样使用的原理和方法. 1.简易计算器 1.先 ...
- python中用于释放类占用的资源的方法是()_编写一个简易计算器,要求根据输入的数字和四则运算符号,计算运算结果并输出。_学小易找答案...
[简答题]20191220 课前作业 新工作页4.1的3-5-3页的填空题,参考教材P135-P144 [简答题]AutoCAD改编视图,尽量不用虚线 1. 主视图采用局部剖,表达右上角小圆筒(及孔) ...
- android简易计算,android实现简易计算器
android实现简易计算器 时间:2021-05-20 本文实例为大家分享了android实现简易计算器展示的具体代码,供大家参考,具体内容如下 效果图: 一.如图,首先布局计算器主页显示 acti ...
- Python之实现一个简易计算器
自己动手写计算器 一.功能分析 用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里 ...
- JavaScript初学入门(JS打印9*9乘法表,JS制作简易计算器)
目录 网页的三部分组成: Java和JavaScript的关系: JavaScript的三种使用方式: Js的5种输出方式: Js的语法初始: js中值的类型: JS中的运算符: JS中的流程控制语句 ...
- Java编写的简易计算器
一般来说,刚开始学习Java比较适合做一些小的东西,比如计算器.图书管理系统什么的,这样会学的稍微快一些.而我这个计算器正适合新手参考,为什么?因为我也是新手.虽说代码比较烂,但是很- 我先说下大致思 ...
最新文章
- 浅谈本地文件包含利用
- (2)搞一搞 seata 之 Spring Cloud 整合
- QTP之web常用对象
- centos 下载为firefox安装flash插件
- Android 中的Json解析工具fastjson 、序列化、反序列化
- Nginx七层负载均衡的案例
- HDU 5176 The Experience of Love 带权并查集
- java怎样下载maven资源库_下载Maven资源库文件
- 老王讲设计模式(一)——策略模式
- 如何使用视频转换器将ogg格式转换为MP3格式
- ffmpeg (一):起步
- 前端开发-jQuery基本语法
- Springboot 默认加载文件(可直接访问、不可直接访问)是出现的问题
- 2018深圳杯数学建模A题--人才吸引力评价模型研究
- 网站一键分享到新浪微博QQ空间腾讯微博
- Oracle 11g 找不到文件 D:\app\Administrator\product\11.2.0\dbhome_1\oc4j\j2ee\oc4j_appli
- MT6737芯片尾缀资料介绍
- 机器学习实战之朴素贝叶斯与垃圾邮件分类
- 卷积神经网络中全连接层、softmax与softmax loss理解
- 用JQuery写一个斗地主发牌器
热门文章
- Code First From DataBase_se7en3_新浪博客
- leveldb:Arena内存池
- 2019-ICPC沈阳J题Graph
- Android百度地图,绘制,覆盖物,导航,定位,细腻分解!
- 玩转PYthon,用Python绘制全球疫情变化地图(好东西,值得一看~~~)
- 打开电脑摄像头使用opencv保存的avi文件打不开
- Unity 从零开始的2D游戏开发 —— 角色移动脚本
- 知识|Takt Time · Cycle Time · Lead Time
- 过来人对研究生阶段的学习建议
- Java多态实现人喂养宠物小案例