实验6 栈的使用 简易计算器

简易计算器(详解用栈实现算术表达式求值) C++详解用栈实现简易计算器,即表达式求值 阅读详情
#include<iostream>
#include<iomanip>
using namespace std;
template<class T>
class List1
{
private:
 T *a1;     //定义一个数组
 int size;  //有多少个元素
 int a1size;  //数组的大小
public:
 List1();
 ~List1();
 T top();   //返回栈顶的值
 void push(T);   //入栈
 void pop();    //删除栈顶元素
 bool empty();  //是否为空
};
//构造
template<class T>
List1<T>::List1()
{
 a1 = new T[1000];
 size = 0;
 a1size = 1000;
}
//析构
template<class T>
List1<T>::~List1()
{
 delete [] a1;
}
//返回栈顶
template<class T>
T List1<T>::top()
{
 return a1[size-1];
}
//是否为空
template<class T>
bool List1<T>::empty()
{
 return size==0;
}
//删除栈顶
template<class T>
void List1<T>::pop()
{
 size--;
}
//压栈
template<class T>
void List1<T>::push(T b)
{
 if (size>=(a1size))
 {
  T *a2 = new T [2 * a1size];
  for (int i = 0; i < size; i++)
  {
   a2[i] = a1[i];
  }
  delete [] a1;
  a1 = a2;
  a1size = 2 * a1size;
 }
 else {
  a1[size] = b;
 // cout<<"函数中a1="<<a1[size];
  size++;
 }
}
int pro(char const x)   //比较优先级
{
 switch (x){
  case '-':{
   return 0;
   break;
  }
  case '+':{
   return 0;
   break;
  }
  case '/':{
   return 1;
   break;
  }
  case '*':{
   return 1;
   break;
  }
  default:{
   return -1;
   break;
  }
 }
 } 
 //判断
template<class T>
void compare(List1<T> &a1,List1<T> &a2,char ch)
{
//cout<<ch<<endl;
  if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')') //判断是否为符号 
  {
   if(ch =='(')
  {
   a2.push(ch);
  //  cout<<" 把"<<ch<<" 压入a2"<<endl; 
   return;
  }
  if(ch ==')')
  {
   while(a2.top()!='(') 
   {a1.push( a2.top());
   // cout<<" 把a2 "<<a2.top()<<" 压入a1"<<endl; 
    a2.pop();}
   if(a2.top()=='(')
   {
    a2.pop();
   // cout<<"左右括号抵消"<<endl;
    return;
    }
  } 
  if(!a2.empty())         //如果符号栈不空,就比较优先级 
   {
    if(pro(ch)<=pro(a2.top()))
     {
      a1.push(a2.top());      
    //  cout<<"把a2的顶 "<<a2.top() <<" 压入a1"<<endl; 
      a2.pop();
      compare(a1,a2,ch);
     }
    else
    {
     a2.push(ch);
    // cout<<" 把"<<ch<<" 压入a2"<<endl; 
     return;
    }
   }
   else
   {a2.push(ch);
   // cout<<" 把"<<ch<<" 压入a2"<<endl; return;
   } 
  }
  if(ch>=48&&ch<=57)
  {
     a1.push(ch);
    // cout<<" 把"<<ch<<" 压入a1"<<endl; return;
  }
 } 
void fun()
{
 List1<char> a1,a2;  
 string a;
 cin>>a;
 for(int i=0;i<a.length();i++)
 {
  compare(a1,a2,a[i]);
 }
 while(!a2.empty())
  {
   a1.push(a2.top());
  // cout<<" 把a2 "<<a2.top()<<" 压入a1"<<endl; 
   a2.pop(); 
  }
 List1<double> a3;
 //将a1倒入a2
 while(!a1.empty())
 {
  a2.push(a1.top());
  a1.pop();
  } 
 //开始计算
 while(!a2.empty())
 {
 // cout<<"****"<<endl;
  if(a2.top()>=48&&a2.top()<=57)
  {
 //  cout<<"a2="<<a2.top()<<endl;
   double c = (double)a2.top()-48.00;
 //  cout<<"c="<<c<<endl;
   a3.push(c);
 //  cout<<"a3="<<a3.top()<<endl; 
   a2.pop() ;
  }
  else 
  {
   double num;
   double num1 = a3.top();
   a3.pop() ;
   double num2 = a3.top();
   a3.pop();
   char aa = a2.top() ;
   switch (aa)
   {
    case '+':{
     num = num1+num2;
     a3.push(num) ;
    // cout<<num2<<"+"<<num1<<"="<<a3.top() <<endl;
     a2.pop() ;
     break;
    }
    case '-':{
     num = num2-num1;
     a3.push(num);
    // cout<<num2<<"-"<<num1<<"="<<a3.top() <<endl;
     a2.pop();
     break;
    }
    case '*':{
     num = num1*num2;
     a3.push(num);
    // cout<<num2<<"*"<<num1<<"="<<a3.top() <<endl;
     a2.pop() ;
     break;
    }
    case '/':{
     num = num2/num1;
     a3.push(num);
    // cout<<num2<<"/"<<num1<<"="<<a3.top() <<endl;
     a2.pop() ; 
     break;
    }
   }
  }
  } 
 cout<<setiosflags(ios::fixed)<<setprecision(2)<<a3.top()<<endl;  
 } 
int main()
{
 int a;
 cin>>a; 
 for(int i=0;i<a;i++)
 {fun(); }  
}
51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真 51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真 文章目录51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真实验内容一、实验一 矩阵键盘中断实验 数码管显示1.仿真图2.代码二、实验二 矩阵键盘简易计算器 LCD显示1.仿真图2.代码总结 实验内容 设计一个单片机键盘接口电路,实现4*4矩阵键盘,用数码管显示相应按键内容,当指定某一个按键连续被按三次时,显示“口”字符号,按键有去抖动功能,数码管可以通过清零键清零。 在设计4*4矩阵键盘基础上,完成两个数的加、减、乘、除运算 阅读详情

相关推荐

JS实现简易网页计算器

js实现简易计算器。计算器的布局不像表格那么公正对称,所以布局这块相对比较繁琐,但是也可以通过这来练习一下CSS。 一、实现功能 完成计算器的加减乘除的基本计算功能 实现输入框中的字符串拼接 二、实现思路 完成基本布局 js实现运算功能 三、知识点 e.target||e.srcElement :获取触发事件的元素 四、具体代码实现 &lt;!DOCTYPE html&gt; &...

Ann_Chenyx 2万+

(PTA)习题6-7 简单计算器 (20分)

模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。 输入样例: 1+2*10-10/2= 输出样例: 10 实现代码...

Ohh_ckx的博客 5396

C++制作简易计算器

C++制作简易计算器

qq_31716541的博客 3511

实验6-8 简单计算器 (20分)

模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。 输入样例: 1+2*10-10/2= 输出样例: 10 #inc...

weixin_46269142的博客 637

数据结构上机题——使用C++和栈实现简易计算器

下面介绍两种通过 方法一:        使用两个栈结构,一个存数字,一个存运算符。        为了实现用栈计算算数表达式的值,需设置两个工作栈:用于存储运算符的栈fn,以及用于存储操作数及中间结果的栈num。 计算步骤: 定义index对表达式进行扫描; 创建两个栈,一个栈存放数字,称为数栈(num);一个栈存放符号,称为符号栈(fn); 当遇到数字时,入数栈;(注意字符位数,数字有可能是多位数) 2.1 若是字符串最后

小新 1991

数据结构实验6-栈

实现基于顺序表的顺序栈(数据结构定义+基本运算) 设计算法判断一个算术表达式的圆括号是否正确配对。   第一个式子: 1*(2+3*(4*(2-1)*(3+x)+5)-6) 能够正确匹配   第二个式子: 1*(2+3*4*(2-1)*(3+x)+5)-6) 不能够正确匹配 实验概要:  本程序包含9个函数: 1)主函数main( ) 2)初始化顺序栈InitStack ( ) 3)入栈Push ( ) 4)出栈 Pop( ) 5)获取栈顶元素 GetTop( ) 6)遍历顺序表 OutStack( ) 7)置空顺序表 setEmpty( ) 8)判断圆括号是否正确配对 Judgepair( ) 9)判断结果输出 Judgeout(int a) //顺序存储结构 #define MAXNUM 20 #define ElemType int /*定义顺序栈的存储结构*/ typedef struct {ElemType stack[MAXNUM]; int top;}SqStack;

数据结构实验-简易计算器-链式栈

内容: 项目名称:简易计算器程序项目内容: 编写程序,模拟简单运算器的工作:输入一个算式(没有空格),遇等号“=”说明输入结束,输出结果。假设计算器只能计算加减乘除运算,运算数和结果都是整数。要求完成以下功能: (1) 从键盘录入中缀表达式,将中缀表达式转换为后缀表达式输出; (2) 输入后缀表达式,计算后缀表达式的值。 代码实现: 节点类: ...

persistenthuang 1150

实验6栈

实验6

Qt实践2: 简易计算器

Qt实现简易计算器 Qt实践1: 简易计算器 引言 因课程教学,需要利用Qt做图形界面设计(GUI)。自学Qt两月有余,图书(Qt Creator快速入门_第三版)、B站视频(传智教育的Qt教学视频等)等资源看了几遍,大部分资料都是讲述纯代码C++编程实现GUI, 新手上手难,不利于课程教学(课程设计,3周教学和实践时间)。因此,基于Qt Creator平台的UI 设计模式,先进行界面布局设计,再利用槽函数模板,适当编写C++程序,实现功能。这样大大减少C++代码的编写, 设计思路也明朗,学生只要按照实现

leyan118的博客 5506

低功耗和UPF介绍

参考[UPF]低功耗(Low Power Design)and UPF介紹

青春易逝,愿不负昭华,期待梦与远方 1万+

串口接收完整一帧数据包的3种方法

本文介绍3种使用串口接受一帧完整数据包的方法,串口接收数据是字节接收的,串口每接收1字节数据,产生一个串口中断,我们在中断中将接收到的数据存放到buf中进行保存,但是数据的发送和接收都是按照帧为单位进行传输的,因此我们要在接收数据的同时判断当前接收的数据是否是完整的一帧。 一般串口完整数据帧的定义:帧头(2字节,例如AA、BB) + 数据长度(2字节) + 数据+ CRC16校验(2字节) + 帧尾(2字节) 帧头、帧尾表示一帧数据的开始和结尾,数据长度表示当前数据帧中负载数据大小,CRC16校...

爱吃鱼的猫 6万+

[嵌入式实验]STM32F4制作简易计算器

嵌入式系统课程设计——简易计算器

weixin_73049545的博客 1183

大漠插件找图找字避坑手册:从ziku0.txt字库制作到易语言精准识别(附综合工具实操)

本文深入解析大漠插件在图像识别中的核心难点,提供从ziku0.txt字库精准制作到易语言高效调用的完整避坑指南。重点讲解如何利用大漠综合工具科学设置偏色与二值化参数,生成高质量色彩描述字符串,并分享识别失败的系统排查方法与进阶优化策略,旨在实现99%的稳定识别率。

weixin_29264201的博客 1208

单片机实现简易计算器

小小计算器,使用矩阵键盘,并且能发出提示音

JackIes_的博客 2616

EZ-USB-FX3 slavefifo调试

最近使用fx3-usb-3.0调试slave fifo的传输,期间遇到许多难以理解的问题。在这里分享给大家,希望可以少走一些弯路,我自己是这样走过来的。 1,首先去官网下载原始的参考设计,并安装所提供的SDK软件:FX3SDKSetup_1.3.4.exe 2,接着把参考设计文档AN65974阅读一遍,分别创建新的SDK工程和FPGA工程。如果使用的原厂的开发板,那么可以按照文档提示,可以很顺畅的跑完整过测试。否则需要匹配自己的硬件,做针对性的更改和移植,而我走的是后一条路,于是开始了漫长的调试之路。.

YDY5659150的专栏 3631

群晖NAS安装HomeAssistant保姆级教程:从Docker部署到智能设备接入

本文提供了一份详尽的群晖NAS安装HomeAssistant保姆级教程,涵盖从Docker部署到智能设备接入的全过程。通过规划存储路径、配置容器环境变量和网络模式,确保系统稳定运行。教程还介绍了如何接入小米、苹果HomeKit等智能家居设备,并利用自动化与仪表盘打造本地化、高响应速度的智能中枢,实现数据隐私与远程控制的完美平衡。

play7的博客 695

【Android Studio】简易计算器

简易计算器要求: 1,操作简单,易于掌握,界面简单。 2.方便进行加,减,乘,除等操作。数字保留小数点后两位。 3.包含小数点运算和输入回退功能。 4.能够进行多次叠加运算。 5.系统能够进行多次叠加运算。 6.系统可以稳定运行。 功能图如下: 逻辑流程图如下: 项目建立 项目的创建。 新建项目:项目名称设置为MainActicity。 在Activity模板中选择Blank Activity或者empty Activity模板。 其余操作不变,完成项目的创建。 计算器主界面的实现 1.设计界面布局XM

gelly_的博客 8015

计量经济学(因果关系探究-空间双重差分模型: 破解空间溢出效应的因果分析工具)

本文介绍了传统双重差分(DID)模型及其局限性,重点阐述了空间DID模型的必要性。传统DID通过组间差分分离干预效应,但无法处理空间溢出效应。空间DID模型引入空间计量方法,包括三种类型:空间自回归模型(SDID-SAR)捕捉因变量溢出,空间误差模型(SDID-SEM)处理残差相关性,空间杜宾模型(SDID-SDM)同时考虑因变量和自变量的空间滞后。模型选择需结合空间相关性检验,适用于环境政策、房地产限购等存在空间交互效应的研究场景。

YBAdvanceFu的博客 2032

【Labivew】简易计算器

说明⇢如果你对Labivew是比较懵懂或者不了解的话可以看看博主写的这篇文章。

"謓泽"正在路上朝着"攻城狮"方向"前进四"! 5689

长鑫存储面试真题解析:DRAM工程师的工程直觉与产线思维

DRAM作为现代计算系统的底层存储基石,其性能与可靠性高度依赖半导体物理基础、工艺窗口控制和电路-系统协同设计。理解电荷保持机制、位线电容耦合效应、信号完整性约束等核心原理,是突破传统数字IC思维、构建真实产线语感的关键。在晶圆厂级工程实践中,TEM缺陷识别、BIST空间聚类分析、Retention失效定位等能力,直接关联良率爬坡与客户系统稳定性。本文聚焦长鑫存储一线技术面试中高频出现的工艺-电路-测试三维问题,融合‘电荷保持’‘信号完整性’等热词,还原DRAM工程师必备的系统性建模能力与闭环验证思维,覆盖

weixin_34293246的博客 337

ctftools-all-in-one使用说明

OAEP (Optimal Asymmetric Encryption Padding) 是一种用于RSA加密的填充方案,目的是提高RSA加密的安全性。在CTF比赛中,如果模数N的两个因子比较接近,使用"费马分解(N)"可能会更快地得到结果;OAEP 是 RSA 的一种标准填充方式(在 PKCS#1 v2.0+ 中定义),因此这类题目本质上仍是 RSA 题,但。,导致你不能直接用常规的 RSA 解密公式 �=�� mod �m=cdmodN 得到有意义的明文。如果你在 CTF 中遇到 RSA 题,

2501_91682449的博客 1719

数据结构:栈实现简易计算器

文章目录栈实现简易计算器思路代码实现栈结构运算方法测试 栈实现简易计算器 之前的博客已经介绍了栈数据结构,栈有着数据先进后出的特点,因此用于实现简易计算器时相当方便。本博文中将介绍如何用栈实现一个可以进行简单四则运算不含括号的简易计算器(中缀表达式) 思路 首先创建两个栈,一个用于存储数而另一个用于存储运算符号。 首先需要一个index索引来遍历表达式 遍历到数字时直接入数栈 遍历到运算符时需要分情况讨论 如果当前符号栈为空直接入栈 如果当前符号栈不为空需要分情况讨论 当前遍历到的运算符的运算优先级小

又蠢又笨的懒羊羊程序猿的博客 6942

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Android】简易计算器

【Android】简易计算器

m0_50115641的博客 6641

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

利用栈实现一个简易的计算器(数据结构之栈)

利用栈实现一个简易的计算器 实现了加减乘除运算(没有使用STL) 基本思想: 1.一个数据栈,一个符号栈 2.优先级判断 3.负号和减号的判别与处理 4.括号匹配 代码如下: #include&lt;iostream&gt; #include&lt;string&gt; #include&lt;cstdlib&gt; /*1、创建栈类,采用数组描述; 2、计算数学表达式的值。 输...

种花家的奋斗兔的博客 3342

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

简易计算器的实现(MFC)

一开始的思路是将数字栈和运算符栈设置在全局区,一边输入一边进栈处理。但是这样必然导致需要一个历史记录容器进行存储历史操作,反而使问题复杂化了,因此将数字栈和运算符栈设置为局部变量。

m0_61219098的博客 3091

java 简易计算器

Java简易计算器的实现 操作流程 用户通过输入要被运算的数字和运算符,进行数字的运算,例如用户输入2+2则会输出4。 加法运算截图 减法运算截图 乘法运算截图 除法运算截图 代码 import java.util.Scanner; //简易计算器 实现加减乘除 public class Demo11 { public static void main(String[] args) { Scanner scanner = new Scanner(Sy

weixin_42607831的博客 7112
上一篇: c++ 卡片游戏
下一篇: 稀疏矩阵
Hhhhhhhhh毅
博客等级 码龄7年 7粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值