递归计算逆波兰表达式

xiaoxiao2021-02-28  59

需求

计算逆波兰表达式(后缀表达式)

逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。

正常的表达式逆波兰表达式a + ba b +a + (b - c)a b c - +a + (b - c) * da b c - d * +a + d * (b - c)a d b c - * +a = 1 + 3a = 1 3 +

测试数据

35.0 24.0 + 12.0 11.0 + *

下面写的代码是使用了freopen的,可以在f盘建一个叫data.txt的文件把数据放进去,代码会直接读取,如果想手动输入就把freopen那一行注释掉。

代码

#include <vector> #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> using namespace std; double exp(vector<string>& v) { string s = v.back(); v.pop_back(); const char* c = s.data(); switch(c[0]) { case '+': return exp(v) + exp(v); case '-': return exp(v) - exp(v); case '*': return exp(v) * exp(v); case '/': return exp(v) / exp(v); default: return atof(c); } } int main() { static vector<string> v; freopen("f:\\data.txt", "r", stdin); string s; while(cin >> s) { v.push_back(s); } cout << exp(v) << endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-35804.html

最新回复(0)