双栈计算求值表达式
2017-06-05 09:12
148 查看
#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; } else continue; } std::cout << value << std::endl; }
很简单的一个Dijkstra的双栈算术表达式求值算法
将符号')'和‘+’、‘-’、‘*’、‘/’放入一个栈,数值放入另外一个栈,忽略'('。
一旦遇到‘)’,将其弹出,并且分别从两个栈弹出两个数值,一个符号,进行数值运算,并将新得到的数值压栈。
相关文章推荐
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 每天一道LeetCode-----对表达式添加括号并求值,返回所有可能的计算结果
- 表达式计算(中缀转后缀,然后求值)
- 爪哇国新游记之二十三----算术表达式计算求值
- ffmpeg文档08-表达式计算/求值
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 数据结构习作之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (技术含量少许)
- java实现表达式求值(算符优先算法,可计算int,double,float 形数据)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (转载)
- 算法笔记_044:表达式计算求值(Java)
- 蓝桥杯 算法训练 表达式的计算(中缀转后缀表达式求值)
- 栈的应用--算术表达式的求值(中缀转后缀然后计算后缀表达式的值)
- 有计算过程的表达式求值
- Java 计算数学表达式(字符串解析求值工具)
- Openjudge-计算概论(A)-简单算术表达式求值
- 表达式求值计算
- 大话数据结构——栈的应用四则元算表达式求值(后缀表达式计算结果)
- SQL Plu计算算数表达式及SQL Plus下清屏快捷键