栈的应用——表达式求和
来源:互联网 发布:模具cnc编程 是什么 编辑:程序博客网 时间:2024/05/01 05:09
#include <iostream>#include <stack>#include <stdio.h>#include <string.h>using namespace std;//符号数组char symbol[7] = {'+', '-', '*', '/', '(', ')', '#'};//栈内元素的优先级int in[7] = {3, 3, 5, 5, 1, 6, 0};//栈外元素的优先级int out[7] = {2, 2, 4, 4, 6, 1, 0};///通过符号字符获取它的数组下标int get(char c){ switch(c) { case '+': return 0; case '-': return 1; case '*': return 2; case '/': return 3; case '(': return 4; case ')': return 5; case '#': return 6; default: return 6; }}///比较栈内运算符c1和栈外运算符c2的优先级char precede(char c1, char c2){ int i1 = get(c1); int i2 = get(c2); if(in[i1] > out[i2]) { return '>'; } else if(in[i1] < out[i2]) { return '<'; } else { return '='; }}///计算基本表达式的值int figure(int a, int theta, int b){ switch(theta) { case 0: return a + b; case 1: return a - b; case 2: return a * b; default: return a / b; }}///计算表达式的值int EvaluateExpression(const char *exp){ stack<int> data; //数据栈 stack<int> oper; //符号栈 oper.push(get('#')); int sum = 0; int flag = 1; //表示正负号 1,表示正 0,表示负 int a, theta, b; if(!('-' == *exp || '(' == *exp || isdigit(*exp))) { cout << "表达式出错1" << endl; return -1; } if('-' == *exp) { flag = 0; exp++;//指向下一个字符 } int index = oper.top(); while(*exp || symbol[index] != '#') { if(isdigit(*exp)) { sum = 0; if(flag) { while(isdigit(*exp)) { sum = sum * 10 + *exp - '0'; exp++; } } else { while(isdigit(*exp)) { sum = sum * 10 - *exp - '0'; exp++; } } data.push(sum); flag = 1; } else { switch(precede(symbol[oper.top()], *exp)) { case '>' : b = data.top(); data.pop(); a = data.top(); data.pop(); theta = oper.top(); oper.pop(); data.push(figure(a, theta, b)); break; case '<' : oper.push(get(*exp)); if(*exp) { exp++; } break; case '=' : oper.pop(); if(*exp) { exp++; } break; } } index = oper.top(); } return data.top();}int main(){ char s[105]; ///只能算整形,浮点会错 printf("请务必保证输入的表达式正确的,时间有限,本人未加表达式查重功能\n例如:(2+4)/2+(3-1)\n"); scanf("%s",s); cout << EvaluateExpression(s) << endl; return 0;}
0 0
- 栈的应用——表达式求和
- 栈的应用——表达式求值
- 栈的应用——计算表达式
- 栈的应用——计算表达式
- 表达式求值——栈的应用
- 栈的应用——求解表达式
- 栈的应用——四则运算表达式
- 栈的应用——四则表达式
- 栈的应用——表达式求值
- 栈的应用——表达式求值
- 栈的应用——表达式求值
- 栈的应用—逆波兰表达式
- 求和公式的应用
- 求和思想的应用
- C++栈的应用——后缀表达式求值、中缀表达式到后缀表达式的转换
- 栈的应用——中缀表达式转后缀表达式,后缀表达式的求值,中缀表达式求值
- 栈的应用——后缀表达式的计算
- 栈的应用—计算表达式的值
- mysql用户可以远程访问但不能本地访问
- listen
- 不穿毛衣的小事
- HTML5
- VS2010的代码粘贴到Word里面的汉字乱码修正问题
- 栈的应用——表达式求和
- UrlRewrite实现伪静态
- Gmail是怎么判断垃圾邮件
- CXF部署到WebLogic的问题
- ArcGIS教程:用不规则矢量多边形裁切栅格数据的方法比较
- 测试原子操作不同的变量
- JavaScript 实现Map效果
- 仿真树:仿真圣诞树
- 使用bit-field和union巧妙定义/存取具有特定结构的数据