本文共 1995 字,大约阅读时间需要 6 分钟。
稍微看了看刘汝佳的白皮书,“实用主义”的STL实在是香到我了,而且在实验室大佬的推荐下我开始了stl的学习。
争取一个星期写三篇,每篇附带一个题目方便理解,那行,直接开始。
毕竟是实用主义,所以就按照给的题目的例子来理解需要用到的函数,算法题目里用的多的函数也会拿出来晒一晒,其他就无所谓啦。
要是有空的希望大家来我自建的博客看看!
(来一张直观的图)
下面就进入题目!
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入:后缀表达式
输出:表达式的值
输入
3.5.2.-*7.+@输出
16字符串长度,1000内。
这其实就是经典的计算器的原理,利用栈来储存数字,遇到运算符号就提出运算,再将结果压回栈中,达成目的。
#include#include using namespace std;int tmp = 0, res = 0;stack num;int main(){ char temp1; while (1) { cin >> temp1; if (temp1 == '@') { //结束判定 goto point; } if (temp1 >= '0' && temp1 <= '9') { tmp *= 10; tmp += temp1 - '0'; } else if (temp1 == '.') { //数据入栈 num.push(tmp); tmp = 0; } else if (temp1 == '+') { //以下是四种符号的运算,注意顺序,是后取出的数做被运算数 int temp2 = num.top(); num.pop(); int temp3 = num.top(); num.pop();//取出两运算数 res = temp3 + temp2;//计算 num.push(res);//压回栈中 } else if (temp1 == '-') { int temp2 = num.top(); num.pop(); int temp3 = num.top(); num.pop(); res = temp3 - temp2; num.push(res); } else if (temp1 == '*') { int temp2 = num.top(); num.pop(); int temp3 = num.top(); num.pop(); res = temp3 * temp2; num.push(res); } else if (temp1 == '/') { int temp2 = num.top(); num.pop(); int temp3 = num.top(); num.pop(); res = temp3 / temp2; num.push(res); } }point: cout << res;//这里直接输出num.top也是可以的,因为栈中只剩下我们算出的答案了。}
转载地址:http://ykhzi.baihongyu.com/