双栈计算求值表达式

来源:互联网 发布:域名在哪续费 编辑:程序博客网 时间:2024/06/15 18:17
#include <iostream>#include <string>#include <stack>int main(){std::string s = "((1+(2+3)*(4*5)))+1)";std::stack<char> stack_c;std::stack<int> stack_i;int value = 0;for (size_t i = 0; i < s.size(); ++i) {if (s[i] <= '9' && s[i] >= '0' ) {std::string x = "";x += s[i];stack_i.push(atoi(x.c_str()));}else if (s[i] != '(' && s[i] != ')')stack_c.push(s[i]);else if (s[i] == ')') {int v = stack_i.top();char c = stack_c.top();stack_i.pop();stack_c.pop();if (c == '+') {v = stack_i.top() + v;stack_i.pop();}else if (c == '*') {v = stack_i.top() * v;stack_i.pop();}stack_i.push(v);value = v;}elsecontinue;}std::cout << value << std::endl;}

很简单的一个Dijkstra的双栈算术表达式求值算法

将符号')'和‘+’、‘-’、‘*’、‘/’放入一个栈,数值放入另外一个栈,忽略'('。

一旦遇到‘)’,将其弹出,并且分别从两个栈弹出两个数值,一个符号,进行数值运算,并将新得到的数值压栈。


原创粉丝点击