后缀式转换为中缀式计算结果

问题描述

编写一个函数,求后缀式的数值,其中一个后缀式存于一个字符数组exp中,exp最后一个字符为“\0”,作为结束符,并且假设后缀式中的数字都只有一位。本题中所出现的除法运算,皆为整除运算,如2/3结果为0,3/2结果为1。

思路

此题为后缀式表达式与中缀表达式之间的转换。当遇到数值的时候入栈,当遇到运算符的时候,连续两次入栈,将两个出栈元素结合运算符进行运算,将结果当成新遇到的数值入栈,如此往复,直到扫描到终止符“\0”,此时栈底元素即为表达式的值。

源代码

#include<iostream>
using namespace std;
#define maxSize 50
int op(int a,char Op,int b)//本函数是运算函数,用来完成算式“a Op b”的运算 
{
	if(Op=='+')
		return a+b;
	if(Op=='-')
		return a-b;
	if(Op=='*')
		return a*b;
	if(Op=='/'){
		if(b==0){
			cout<<"ERROR";
			return 0;
		}else{
			return a/b;
		}
	}
} 
int com(char exp[])//后缀式计算函数 
{
	int i,a,b,c;
	int stack[maxSize];
	int top=-1;
	char Op;
	for(i=0;exp[i]!='\0';++i){
		if(exp[i]>='0'&&exp[i]<='9')
			stack[++top]=exp[i]-'0';//因为数组是字符数组,0-9数字才可以用这个方法 
		else{
			Op=exp[i];
			b=stack[top--];//后入的是b,先取b 
			a=stack[top--];
			c=op(a,Op,b);//调用运算函数 
			stack[++top]=c; 
		}
	}
	return stack[top];
}

int main() 
{
	int n;
	cin>>n;
	char exp[maxSize];
	for(int i=0;i<n;++i){
		cin>>exp[i];
	}
	cout<<com(exp);
	return 0;
}

执行结果

后缀式如图
原中缀式为(1+2+3*4) / 5
注意一个中缀式可以转化为多个后缀式。
在这里插入图片描述

发布了28 篇原创文章 · 获赞 0 · 访问量 629
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览