博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之中缀式计算
阅读量:5257 次
发布时间:2019-06-14

本文共 2903 字,大约阅读时间需要 9 分钟。

还是直接贴代码

 

// project1.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include
#include
#include
#include
#define LENGTH 1000using namespace std;int priority(char op){ switch(op){ case '(': return 0; case '+': case '-': return 1; case '*': case '/': return 2; default: return -1; }}//将一个中缀表达式转换成后缀表达式string inffix_to_suffix(char exp[]){ stack
op_stk; string suffix; char *ptr=exp; char operand[LENGTH]; int i=0; while(*ptr!='\0'){ if(isdigit(*ptr) || *ptr=='.' || *ptr=='E' || *ptr=='e') operand[i++]=*ptr; else{ operand[i]='\0'; i=0; if(operand[0]!='\0') suffix+=string(" ").append(operand); if(*ptr!='#'){
//exp以#结束 switch (*ptr){ case '('://入栈 op_stk.push(*ptr);break; case ')'://弹出所有在左括号之前的操作符 while(!op_stk.empty() && op_stk.top()!='('){ suffix+=' ';suffix+=op_stk.top(); op_stk.pop(); } if(op_stk.top()=='(') op_stk.pop(); break; case '+': case '-': case '*': case '/': while(!op_stk.empty() && priority(op_stk.top())>=priority(*ptr)){ suffix+=' ';suffix+=op_stk.top(); op_stk.pop(); } op_stk.push(*ptr); break; default: break; } } else { while(! op_stk.empty()){ suffix+=' ';suffix+=op_stk.top(); op_stk.pop(); } break; } } ptr++; } return suffix;//返回一个后缀表达式的string串}//计算一个后缀表达式的值double cal_suffix(string suffix){ istringstream iss(suffix); string str; double op1,op2; stack
stk; while(iss>>str){ if(str.length()==1){ //操作符 op1=stk.top();stk.pop(); op2=stk.top();stk.pop(); switch(str[0]){ case '+': stk.push((op1+op2));break; case '-': stk.push((op2-op1));break; case '*': stk.push((op1*op2));break; case '/': stk.push((op2/op1));break; } } else stk.push(atof(str.c_str())); } if(!stk.empty()) return stk.top();}int _tmain(int argc, _TCHAR* argv[]){ char exp[LENGTH]="(3.14+5.0E1/10-4.14)*(0.12-0.02)/0.1-5.01e2*0.01#"; string suffix=inffix_to_suffix(exp); cout<
<

 

转载于:https://www.cnblogs.com/abc123456789/p/3433446.html

你可能感兴趣的文章
微信智能开放平台
查看>>
ArcGIS Engine 中的绘制与编辑
查看>>
Oracle--通配符、Escape转义字符、模糊查询语句
查看>>
子网划分讲解及练习(一)
查看>>
c# 文件笔记
查看>>
第一页 - 工具的使用(webstorm)
查看>>
Linux 进程资源用量监控和按用户设置进程限制
查看>>
IE浏览器整页截屏程序(二)
查看>>
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>
HDOJ 1754 I Hate It(线段树基本操作)
查看>>
Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
查看>>
latex tree
查看>>