栈应用之计算全括号形式的数值表达式
来源:互联网 发布:软件如何申请专利 编辑:程序博客网 时间:2024/05/22 14:11
1.判断表达式括号是否配对
#include <iostream>#include <stack>using namespace std;bool isBalanced(const string& expression) {const char left = '(', right = ')';bool flag = true;stack<char> chstack;char ch;for(int i = 0; i < expression.size(); i++) {ch = expression[i];if(ch == '(')chstack.push(ch);else if(ch == ')' && !chstack.empty())chstack.pop();else if(ch == ')' && chstack.empty()) {flag = false;break;}}return (chstack.empty() && flag);}
2.计算数值表达式
使用条件:(1)表达式使用全括号形式,中缀表达式 (2)表达式中只能出现‘+’、‘-’、‘*’、‘/'等二元操作符,不能出现取反等一元操作符,即为非负数
#include <iostream>#include <stack>#include <cctype> using namespace std;void evaluate_top(stack<double>& nums, stack<char>& operations) {double operd2 = nums.top();nums.pop();double operd1 = nums.top();nums.pop();switch(operations.top()) {case '+' : nums.push(operd1 + operd2);break;case '-' : nums.push(operd1 - operd2);break;case '*' : nums.push(operd1 * operd2);break;case '/' : nums.push(operd1 / operd2);break;}operations.pop();}double read_and_evaluate(istream &ins) {stack<char> chstack;stack<double> dstack;const char DECIMAL = '.', RIGHT_PAR = ')';double num;char ch;while(ins && ins.peek()!='\n') {if(isdigit(ins.peek()) || ins.peek() == DECIMAL) {ins >> num;dstack.push(num);}else if((ins.peek() == '+') || (ins.peek() == '-') || (ins.peek() == '*') || (ins.peek() == '/')) {ins >> ch;chstack.push(ch);}else if(ins.peek() == RIGHT_PAR) {ins.ignore();evaluate_top(dstack, chstack);}else ins.ignore();}return dstack.top();}int main() {cout << "Type a fully parethesized arithmetic expression:" << endl;double result = read_and_evaluate(cin);cout << "That evaluates to " << result << endl;return 0;}
0 0
- 栈应用之计算全括号形式的数值表达式
- 计算带括号的数值表达式
- 2. 栈的两个应用:括号匹配和表达式的计算。
- 栈的应用,括号匹配,后缀表达式计算,有趣的汉诺塔--python实现
- 栈-----括号匹配+表达式计算
- 使用堆栈将缺少左括号的表达式补全并计算其值
- yield表达式形式的应用
- 基于栈的应用之计算后缀表达式
- 数据结构之链式栈的应用-简单表达式计算
- 堆栈的应用之计算数学表达式
- 栈的应用之括号的匹配
- 栈的应用之括号的匹配
- Recursion 计算表达式的括号组合 @CareerCup
- 计算带括号的四则运算表达式
- 栈的应用之括号匹配
- 数据结构栈的应用之括号匹配
- 栈的应用之括号匹配
- 数据结构之 栈的应用 括号匹配
- Android网络判断,网络设置
- android 输入系统
- iOS 图片压缩UIImage方法扩展
- 这两年互联网市场为什么涨薪这么快?目前的市场供需情况? 现在互联网市场行情如何?需要什么样的人
- VARIANT 与char *的相互转换
- 栈应用之计算全括号形式的数值表达式
- Frame-Relay基础及配置学习笔记
- TCP三次握手
- [Linux自动化管理] 批量追加用户
- PB对DW数据窗口操作必学
- eclipse加载安卓工程的时候出现select at lease one project错误
- 每个极客都应该知道的Linux技巧
- jquery easyui datagrid 两次加载的问题
- Java从网络下载图片