首页 > 其他分享 >Evaluation Of postfix Expression using stack【1月21日学习笔记】

Evaluation Of postfix Expression using stack【1月21日学习笔记】

时间:2024-01-21 15:55:42浏览次数:38  
标签:return 21 op2 postfix int exp operation Evaluation op1

点击查看代码
//Evaluation Of postfix Expression using stack
#include<iostream>
#include<stack>//stack from standard template library(STL)
#include<string>
using namespace std;

int EvaluatePostfix(string exp);

bool IsOperator(char c);

int PerformOperation(char operation, int  op1, int op2);

bool IsNumericDigit(char c);

int main() {
	string expression;
	getline(cin, expression);//与cin>>不同,可以读取空格,直到整行换行符结束
	int result = EvaluatePostfix(expression);
	cout << "Output = " << result << "\n";
}


int EvaluatePostfix(string exp) {
	stack<int> S;//存放操作数及运算结果

	for (int i = 0; i < exp.length(); i++) {
		if (exp[i] == ' '||exp[i]==',')  continue;//设置操作数之间分隔符
		else if (IsOperator(exp[i])) {//拿出最后两个操作数进行运算
			int op2 = S.top();//类型转换
			S.pop();
			int op1 = S.top();
			S.pop();
			int result = PerformOperation(exp[i], op1, op2);
			S.push(result);//运算结果放回
		}
		else if (IsNumericDigit(exp[i])) {//一位一位的读取操作数
			int operand = 0;//初始化为0
			while (i < exp.length() && IsNumericDigit(exp[i])) {
				operand = operand * 10 + (exp[i] - '0');//右移进位
				                                        //使用exp[i]-'0'将ASCII值转化成目标整数
				i++;
			}
			i--;//退回到已读最后一位
			S.push(operand);//放入完整操作数
		}
	}
	return S.top();//最终结果 
}

bool IsOperator(char c) {
	if (c == '+' || c == '-' || c == '*' || c == '/')
		return true;
	return false;
}

int PerformOperation(char operation, int  op1, int op2) {
	if (operation == '+')  return op1 + op2;
	else if (operation == '-')  return op1 - op2;
	else if (operation == '*')  return op1 * op2;
	else if (operation == '/')  return op1 / op2;

	else cout << "Unexpected Error \n";
	return -1;
}

bool IsNumericDigit(char c) {
	if (c >= '0' && c <= '9')  return true;
	return false;
}

标签:return,21,op2,postfix,int,exp,operation,Evaluation,op1
From: https://www.cnblogs.com/whvivy/p/17977936

相关文章

  • AI Weekly『1月15-21日』: OpenAI筹集资金建造AI芯片工厂;马斯克加码AI投资,共投入110亿
    AI领域本周『1月15-21日』要闻速览OpenAI首席执行官SamAltman计划筹集数十亿美元建立全球性AI芯片工厂网络,应对未来AI相关芯片的需求激增。埃隆·马斯克和SamAltman共投入110亿美元加码AI投资,展现对AI领域的重视和竞争态势。微软推出CopilotPro及Copilot移动应用,扩展至各规模企......
  • 2024.1.21日报
    今天继续学习spark,完成了实验三和实验四,实验三配置环境之前基本已经完成了虚拟机截图如下 实验四上来遇到了一个问题,就是我的sparkshell找不到本地文件的路径,因此我选择把他上传到了hdfs中,查阅资料的时候发现这可能是因为spark检索文件的时候是从不同的节点上检索,所以需要保证......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.21)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • 21String类的实现
    String类的实现//#include<string>#include<iostream>usingnamespacestd;classString{private: char*_pstr; friendStringoperator+(constString&s1,constString&s2); friendostream&operator<<(ostream&out,constS......
  • P2181 对角线
    题目链接:首先由于不会有三条对角线交于一点,所以过某一个交点有且只能有\(2\)条对角线。而这两条对角线实质上是确定了\(4\)个顶点,因此我们只需要确定\(4\)个顶点就得到了这个唯一确定的交点。因此我们只需要求这样4个顶点的搭配有多少个了,也就是从\(n\)个顶点中取\(4\)......
  • Office 2021:高效工作,轻松生活 mac/win版
    Office2021是微软公司推出的一款办公软件套件,包括Word、Excel、PowerPoint、Outlook等多个应用程序,是全球范围内广泛使用的办公软件之一。→→↓↓载Office2021mac/win首先,Office2021在功能上进行了许多改进和升级,使得用户可以更加高效地完成各种任务。其中最显著的特点是增......
  • SP2150
    不难想到,求区间和可以先\(O(n)\)预处理前缀和,后面就能做到对于区间\([l,r]\)可以\(O(1)\)求出\(\sum_{i=l}^ra_i\)。接下来考虑如何求解答案。设预处理后的前缀和数组\(sum_i=\sum_{j=1}^ia_j\)。区间\([l,r]\)满足要求,当且仅当\(sum_r-sum_{l-1}=47\)成立。将上......
  • NOIP2021
    NOIP2021来啦!Day0为了方便,我们提前一天便到了考点附近。出发之前,我们又在机房里呆了两个小时,大家都在忙着复习着诸如线段树等模板。两个小时的车程后,我们吃过饭,老师又把我们集中开会,跟我们讲了一堆注意事项。讲完之后,大家都睡了。Day1第一次打联赛,不免有些小紧张,毕竟这些题目......
  • P8112 [Cnoi2021] 符文破译 题解
    题目传送门思路先看数据范围,我们发现两个字符串的长度最大会达到\(5\times10^7\)。这立刻打消了我用暴力的想法。于是,我选择了用KMP模式匹配,这一个能够在线性时间内判定字符串\(A\)是否是字符串\(B\)的字串,并求出字符串\(A\)在字符串\(B\)中各次出现的位置。如......
  • UVA821
    题目的大意是求所有点对之间最短路之和的平均值。要求所有点对之间的最短路(即全源最短路),并且数据范围很小。很容易想到使用Floyd算法。Floyd的实现(会用的可以跳过)Floyd本质上是一种动态规划。设\(d_{i,j}\)表示从\(i\)到\(j\)的最短路径的长度(注意题目输入为有向边,所......