c++中缀表达式转后缀表达式并计算
2017-03-05 16:03
369 查看
#include <iostream> #include <stack> using namespace std; //栈内优先级 int isp(char a) { switch (a) { case '+': case '-': return 3; case '*': case '/': return 5; case '(': return 1; case ')': return 6; case '#': return 0; default: return -1; break; } } //栈外优先级 int icp(char a) { switch (a) { case '+': case '-': return 2; case '*': case '/': return 4; case '(': return 6; case ')': return 1; case '#': return 0; default: return -1; break; } } //计算函数 int cal(int a, int b, char c) { switch (c) { case '+': return b + a; case '-': return b - a; case '*': return b * a; default: return b / a; } } char in_order_expression[1000];//中缀表达式 char post_order_expression[1000];//后缀表达式 stack<int> calculation;//计算的时候到栈 stack<char> tmp;//中缀改后缀的时候到过渡栈 int i = 0, j = 0; int main(int argc, const char * argv[]) { // insert code here... std::cout << "Hello, World!\n"; cout << "请输入中缀表达式,并以#结尾" << endl; cin >> in_order_expression; // for (int k = 0; in_order_expression[k] != '#'; k++) { // cout <<in_order_expression[k] << " "; // } tmp.push('#'); // int a = 0; // for (a = 0; in_order_expression[a] != '#'; a++); // int len = a + 1; while (!tmp.empty()) { //如果是数字,直接输出到后缀表达式里 if (in_order_expression[i] >= '0' && in_order_expression[i] <= '9') { post_order_expression[j++] = in_order_expression[i++]; } else { //如果是符号的话,则根据isp和icp的大小执行相应的动作 if (icp(in_order_expression[i]) > isp(tmp.top())) { tmp.push(in_order_expression[i++]); } //这里的i不能++,要保证出栈并输出之后还能继续对这个符号进行操作 else if (icp(in_order_expression[i]) < isp(tmp.top())) { post_order_expression[j++] = tmp.top(); tmp.pop(); } //只有左右括号的时候会执行这个操作 else { tmp.pop(); } } cout << i << "次迭代成功" << endl;//做个标记 }
//计算部分i = 0;do {//如果是数字,直接入栈if (post_order_expression[i] >= '0' && post_order_expression[i] <= '9') {calculation.push(post_order_expression[i++] - '0');}else{//符号的话,就要根据符号的类型,计算栈中最上面两个数字的结果,然后再入栈,保证每次//计算的时候,栈里永远有两个数字int temp1 = calculation.top();calculation.pop();int temp2 = calculation.top();calculation.pop();calculation.push(cal(temp1, temp2, post_order_expression[i++]));}cout << i << "次计算成功" << endl;//做个标记}while (i < j);cout << calculation.top() << endl;return 0;}
相关文章推荐
- c++ 中缀表达式转后缀表达式并计算值
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- 中缀表达式转换成后缀表达式/计算后缀表达式
- 中缀表达式转后缀表达式及后缀表达式的计算
- 中缀表达式转后缀表达式 并计算后缀表达式
- 中缀表达式转后缀表达式并进行计算 原理
- 中缀表达式转换为后缀表达式及逆波兰式计算
- 中缀表达式/前缀表达式/后缀表达式 的计算方法
- 数据结构(C++实现):栈的运用--中缀表达式转换为后缀表达式既 nyoj 257
- 栈应用(中缀表达式转后缀表达式并计算后缀表达式的值)
- 中缀表达式转换成后缀表达式 计算后缀表达式的值 幂操作符添加到你的指令系统中去
- C++数据结构与STL--栈的应用--后缀表达式的计算
- 中缀表达式转后缀表达式并计算
- 堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现
- 中缀表达式转后缀表达式,并计算后缀表达式值
- C/C++ 已知中缀表达式,求后缀表达式及值
- 【综合】中缀表达式转换成后缀表达式后,用后缀表达式计算出结果
- c++通过栈将中缀表达式转成后缀表达式
- 表达式计算(中缀表达式转后缀前缀表达式)
- 中缀表达式转后缀表达式 (中缀表达式的计算)