stack 实现中缀表达式
来源:互联网 发布:w判断矩阵 编辑:程序博客网 时间:2024/06/06 14:08
实验3
题目 算术表达式的计算
【问题描述】
利用堆栈实现算术表达式的计算
【实验内容】
必做内容:运算对象均为整数
选作内容:运算对象扩充为可以是带小数位的浮点数
【测试数据】
输入格式:一行一个算术表达式,可以输入若干行
输出格式:一行一个输出结果
样例:
输入样例:
2*(3 + 4)
6+ 2 * 8 /4
输出样例
14
10
代码:
#include<iostream>//中缀——>后缀——>计算(不包括括号)#include<stack>#include<string>using namespace std;void main(){ bool flag;//判断是否包括() char ex[20][20]; int i=0,k; int m; cout<<"n="; cin>>m; cout<<"输入表达式:"<<endl; for(i=0;i<m;i++) { k=0; while(ex[i][k-1]!='=') { cin>>ex[i][k]; k++; } } cout<<"输出表达式:"<<endl; int left,right,rel;//后缀算式的计算 int n,num; int f; stack<char> a;//利用栈来储存运算符号 char last[20][20];//存放后缀表达式 stack<int>b; for(int j=0;j<i;j++) { k=0; f=0; n=0; while(ex[j][k]!='=') { if(ex[j][k]=='(') { flag=true; break; } else flag=false; k++; } k=0; while(ex[j][k]!='='&&flag==true)//算式包括括号 { if(ex[j][k]=='('||ex[j][k]=='+'||ex[j][k]=='-'||ex[j][k]=='*'||ex[j][k]=='/') a.push(ex[j][k]); else if(ex[j][k]==')') while(!a.empty()) if(a.top()=='(') a.pop(); else { last[j][f]=a.top(); a.pop(); f++; } else { last[j][f]=ex[j][k]; f++; } k++; } if(flag==true) { while(!a.empty()) { last[j][f]=a.top(); a.pop(); f++; } } while(ex[j][k]!='='&&flag==false)//算式不包括括号 { if(ex[j][k]=='+'||ex[j][k]=='-'||ex[j][k]=='*'||ex[j][k]=='/') a.push(ex[j][k]); else { last[j][f]=ex[j][k]; f++; } if(ex[j][k+1]=='=') while(!a.empty()) if(a.top()=='(') a.pop(); else { last[j][f]=a.top(); a.pop(); f++; } k++; } last[j][f]='='; while(last[j][n]!='=') { if(last[j][n]>=48&&last[j][n]<=57) { num=(int)last[j][n]-48; //数值转换成整型 b.push(num); } else { right=b.top(); b.pop(); left=b.top(); b.pop(); switch(last[j][n]) { case '+':rel=right+left;break; case '-':rel=left-right;break; case '*':rel=left*right;break; case '/': if(right==0) cout<<"right=0!"<<endl; else rel=left/right; break; } b.push(rel); } n++; } cout<<b.top()<<endl; b.pop(); }}
- stack 实现中缀表达式
- 【stack 实现前缀、后缀、中缀表达式运算】
- java 用stack 实现中缀表达式转后缀
- 中缀到后缀表达式的转换:java-stack实现
- 中缀表达式转换为后缀表达式c++的实现(数据结构stack)
- 中缀表达式算法实现&中缀表达式转后缀表达式
- 【数据结构】中缀表达式的实现
- 计算器实现---中缀表达式转后缀表达式
- 栈实现中缀表达式转为后缀表达式
- java 实现中缀表达式转为后缀表达式
- 中缀表达式转成后缀表达式 C实现
- 中缀表达式、后缀表达式 Java实现
- 中缀表达式转后缀表达式的实现
- 自己实现的一个中缀表达式计算
- 中缀转后缀表达式(栈实现)
- C++实现中缀表达式求值代码
- 中缀表达式变后缀:栈实现
- 用栈实现中缀表达式c++
- Eclipse 插件Maven在使用 add dependency,找不到包,解决办法
- UAP DataGrid 赋值
- C++ primer 中文第三版 阅读笔记 第八章
- 使用bitset实现二进制和十进制的相互转换
- Maven基础-默认中央仓库[settings.xml 配置详解 ]
- stack 实现中缀表达式
- 学生健康表(链表)
- 顺序表学生个人健康信息表(数组)
- 二叉树的基本操作
- 二分查找算法(快速查找)
- 二叉搜索树
- 排序算法(快速排序、直接插入排序、直接选择、冒泡排序)
- Sprintf新解
- 图的遍历