表达式求值
2018-03-26 10:58
204 查看
#include <iostream> #include <vector> #include <cstdio> using namespace std; string f(string s){ vector<char> v; vector<char> vv; for(int i = 0; i < s.length(); i++){ switch(s[i]){ case '+': case '-': while(!v.empty() && v.back() != '('){ char t = v.back(); vv.push_back(t); v.pop_back(); } v.push_back(s[i]); break; case '*': case '/': while(!v.empty() && (v.back() == '*' || v.back() == '/')){ vv.push_back(v.back()); v.pop_back(); } v.push_back(s[i]); break; case '(': v.push_back('('); break; case ')': while(!v.empty() && v.back() != '('){ vv.push_back(v.back()); v.pop_back(); } v.pop_back(); break; default: while(isdigit(s[i])){ vv.push_back(s[i]); i++; } i--; vv.push_back('#'); } cout << i << " inserted" << endl; } while(!v.empty()){ vv.push_back(v.back()); v.pop_back(); } s = ""; for(int i = 0; i < vv.size(); i++){ s += vv.at(i); } return s; } int f1(string s){ vector<int> v; for(int i = 0; i < s.length(); i++){ int a, b; switch(s[i]){ case '-': b = v.back(); v.pop_back(); a = v.back(); v.pop_back(); v.push_back(a - b); break; case '+': b = v.back(); v.pop_back(); a = v.back(); v.pop_back(); v.push_back(a + b); break; case '*': b = v.back(); v.pop_back(); a = v.back(); v.pop_back(); v.push_back(a * b); break; case '/': b = v.back(); v.pop_back(); a = v.back(); v.pop_back(); v.push_back(a / b); break; default: a = 0; while(isdigit(s[i])){ a = a * 10 + s[i] - '0'; i++; } v.push_back(a); } } return v.back(); } int main(){ string s = "(56-20)/(4+2)"; cout << f(s) << endl; cout << f1(f(s)); }过程中需要用到两次栈,两次都是从左到右进栈
中间结果用字符串接收。
操作符的位置会改变,但是操作数的位置不会改变。
相关文章推荐
- Polynomial Problem( HDU - 1296 表达式求值)
- HDU 1237 简单计算器(不带括号 字符间有空格的表达式求值)
- 表达式求值
- BUAA OJ 722 Gzh之表达式求值
- 栈的运用(算数表达式求值的算符优先算法 十以内简单版)
- 表达式求值
- python 求值表达式解析
- 课程设计 栈之 后缀表达式求值 中缀表达式转后缀表达式
- java后缀表达式实现表达式求值
- C写的表达式求值
- 【B】表达式求值
- XYNUOJ 第四次考试 表达式求值
- 南阳35表达式求值(栈)
- 算术表达式求值(中缀转后缀,后缀求值,java 栈实现)
- nyoj 1272 表达式求值
- 表达式求值
- 栈对于表达式求值的特殊作用&&UVa442 Matrix Chain Multiplication(矩阵链乘)的理解与解析
- 裘宗燕:C/C++ 语言中的表达式求值
- 表达式求值总结
- 栈的应用之表达式求值(算符优先法)