说明:简单高效的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++实现简易计算器(正则表达式计算)相关推荐

  1. FPGA简易计算器 + 工程源码

    一.设计要求 利用Altera公司的FPGA做为主控设计一款简易计算器.简易计算器可以计算简单的千位以内加减乘除计算,通过矩阵键盘输入数字及运算符,并将计算结果显示在数码管上. 设计中采用Altera ...

  2. c语言51单片机计算器,新基于51单片机的简易计算器

    <新基于51单片机的简易计算器>由会员分享,可在线阅读,更多相关<新基于51单片机的简易计算器(24页珍藏版)>请在人人文库网上搜索. 1.基于51单片机的简易计算器1.前言: ...

  3. python表达式计算器_Python正则表达式实现简易计算器功能示例

    本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+ ...

  4. javascript_day03------js学习第三天,关于简易计算器的加减乘除,对于年份判断和日期天数计算,以及if和switch的区分用法,最后是循环。

    js的学习很重要,基础知识点要落实.这既离不开日常的练习使用锻炼自己的计算机思维模式,同样的知识点分析总结和整理也是重中之重,不能只懂怎么用却不能明白自己这样使用的原理和方法. 1.简易计算器 1.先 ...

  5. python中用于释放类占用的资源的方法是()_编写一个简易计算器,要求根据输入的数字和四则运算符号,计算运算结果并输出。_学小易找答案...

    [简答题]20191220 课前作业 新工作页4.1的3-5-3页的填空题,参考教材P135-P144 [简答题]AutoCAD改编视图,尽量不用虚线 1. 主视图采用局部剖,表达右上角小圆筒(及孔) ...

  6. android简易计算,android实现简易计算器

    android实现简易计算器 时间:2021-05-20 本文实例为大家分享了android实现简易计算器展示的具体代码,供大家参考,具体内容如下 效果图: 一.如图,首先布局计算器主页显示 acti ...

  7. Python之实现一个简易计算器

    自己动手写计算器 一.功能分析 用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里 ...

  8. JavaScript初学入门(JS打印9*9乘法表,JS制作简易计算器)

    目录 网页的三部分组成: Java和JavaScript的关系: JavaScript的三种使用方式: Js的5种输出方式: Js的语法初始: js中值的类型: JS中的运算符: JS中的流程控制语句 ...

  9. Java编写的简易计算器

    一般来说,刚开始学习Java比较适合做一些小的东西,比如计算器.图书管理系统什么的,这样会学的稍微快一些.而我这个计算器正适合新手参考,为什么?因为我也是新手.虽说代码比较烂,但是很- 我先说下大致思 ...

最新文章

  1. 浅谈本地文件包含利用
  2. (2)搞一搞 seata 之 Spring Cloud 整合
  3. QTP之web常用对象
  4. centos 下载为firefox安装flash插件
  5. Android 中的Json解析工具fastjson 、序列化、反序列化
  6. Nginx七层负载均衡的案例
  7. HDU 5176 The Experience of Love 带权并查集
  8. java怎样下载maven资源库_下载Maven资源库文件
  9. 老王讲设计模式(一)——策略模式
  10. 如何使用视频转换器将ogg格式转换为MP3格式
  11. ffmpeg (一):起步
  12. 前端开发-jQuery基本语法
  13. Springboot 默认加载文件(可直接访问、不可直接访问)是出现的问题
  14. 2018深圳杯数学建模A题--人才吸引力评价模型研究
  15. 网站一键分享到新浪微博QQ空间腾讯微博
  16. Oracle 11g 找不到文件 D:\app\Administrator\product\11.2.0\dbhome_1\oc4j\j2ee\oc4j_appli
  17. MT6737芯片尾缀资料介绍
  18. 机器学习实战之朴素贝叶斯与垃圾邮件分类
  19. 卷积神经网络中全连接层、softmax与softmax loss理解
  20. 用JQuery写一个斗地主发牌器

热门文章

  1. Code First From DataBase_se7en3_新浪博客
  2. leveldb:Arena内存池
  3. 2019-ICPC沈阳J题Graph
  4. Android百度地图,绘制,覆盖物,导航,定位,细腻分解!
  5. 玩转PYthon,用Python绘制全球疫情变化地图(好东西,值得一看~~~)
  6. 打开电脑摄像头使用opencv保存的avi文件打不开
  7. Unity 从零开始的2D游戏开发 —— 角色移动脚本
  8. 知识|Takt Time · Cycle Time · Lead Time
  9. 过来人对研究生阶段的学习建议
  10. Java多态实现人喂养宠物小案例