包含括号桌面计算器代码实现c++

时间: 2023-08-03 19:25:50 浏览: 58
以下是包含括号的桌面计算器的简单代码实现(C++): ```c++ #include<iostream> #include<stack> using namespace std; /* 函数声明 */ int priority(char op); //获取运算符优先级 double calculate(double num1, char op, double num2); //计算表达式 int main() { string expression; //表达式 stack<char> opStack; //运算符栈 stack<double> numStack; //操作数栈 cout << "请输入表达式: "; getline(cin, expression); for (int i = 0; i < expression.length(); i++) { char ch = expression[i]; if (isdigit(ch)) { //如果是数字,将其转换为double类型并入栈 double num = ch - '0'; i++; while (i < expression.length() && isdigit(expression[i])) { num = num * 10 + (expression[i] - '0'); i++; } i--; //回退一位 numStack.push(num); } else if (ch == '(') { //如果是左括号,直接入栈 opStack.push(ch); } else if (ch == ')') { //如果是右括号,则不断弹出运算符和操作数,直到遇到左括号 while (!opStack.empty() && opStack.top() != '(') { double num2 = numStack.top(); numStack.pop(); double num1 = numStack.top(); numStack.pop(); char op = opStack.top(); opStack.pop(); double result = calculate(num1, op, num2); numStack.push(result); } if (!opStack.empty() && opStack.top() == '(') { opStack.pop(); } else { cout << "错误:表达式不合法" << endl; return 0; } } else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') { while (!opStack.empty() && priority(ch) <= priority(opStack.top())) { double num2 = numStack.top(); numStack.pop(); double num1 = numStack.top(); numStack.pop(); char op = opStack.top(); opStack.pop(); double result = calculate(num1, op, num2); numStack.push(result); } opStack.push(ch); } else if (ch == ' ') { //忽略空格 continue; } else { //其他情况,表达式不合法 cout << "错误:表达式不合法" << endl; return 0; } } //处理剩余的运算符和操作数 while (!opStack.empty()) { double num2 = numStack.top(); numStack.pop(); double num1 = numStack.top(); numStack.pop(); char op = opStack.top(); opStack.pop(); double result = calculate(num1, op, num2); numStack.push(result); } //输出结果 cout << "计算结果为:" << numStack.top() << endl; return 0; } /* 函数定义 */ int priority(char op) { if (op == '+' || op == '-') { return 1; } else if (op == '*' || op == '/') { return 2; } else { return 0; } } double calculate(double num1, char op, double num2) { switch (op) { case '+': return num1 + num2; case '-': return num1 - num2; case '*': return num1 * num2; case '/': if (num2 == 0) { cout << "错误:除数不能为0" << endl; exit(0); } else { return num1 / num2; } default: cout << "错误:无效的运算符" << endl; exit(0); } } ``` 该程序可以处理带有括号的四则运算表达式,并且能够正确计算表达式的值。在处理表达式时,采用了两个栈分别存储运算符和操作数,通过比较优先级来决定是否需要弹出栈顶元素进行运算,最终输出计算结果。

相关推荐

最新推荐

recommend-type

C++中用栈来判断括号字符串匹配问题的实现方法

主要介绍了C++中用栈来判断括号字符串匹配问题的实现方法,是一个比较实用的算法技巧,包含了关于栈的基本操作,需要的朋友可以参考下
recommend-type

C++模拟计算器功能的程序

问题描述 设计一个模拟计算器功能的程序,它读入一个表达式,如果是一个正确的表达式(即它由操作数、圆括号和+、-、*、/四种运算符组成),则求出该表达式的值;否则给出某种错误信息。 基本要求:读入一个以字符...
recommend-type

Python实现括号匹配方法详解

这篇文章主要介绍了python实现括号匹配方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用一个栈【python中可以用List】就可以解决,时间和空间...
recommend-type

pycharm 代码自动补全的实现方法(图文)

主要介绍了pycharm 代码自动补全的实现方法(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

组成原理课程实验:MIPS 流水线CPU、实现36条指令、转发、冒险检测-内含源码和说明书.zip

组成原理课程实验:MIPS 流水线CPU、实现36条指令、转发、冒险检测-内含源码和说明书.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。