- 浏览: 142918 次
- 性别:
- 来自: 帝都
文章分类
最新评论
-
jackchen0227:
汗,谢谢啊
joj 1817: Triangle 三角形的判定 -
RootJ:
输出时候没有写:号。。。
joj 1817: Triangle 三角形的判定 -
jackchen0227:
嗯再捡捡。。
不带括号的四则运算 -
ruby_windy:
不是大二实验课写的么...
不带括号的四则运算
/* 不带括号的表达式的四则运算 使用两个堆栈,一个op(存放加号与减号) 一个exp(存放操作数) 乘除法直接计算,加减法先压入堆栈 */ #include <string> #include <iostream> #include <stack> #include <cctype> #define maxInt 65535 using namespace std; stack<char> op; //存放操作符 stack<int> exp;//存放操作数 int add(int num1,int num2) { return num1 + num2; } int minus(int num1,int num2) { return num1 - num2; } int mutiple(int num1,int num2) { return num1 * num2; } int devide(int num1,int num2) { return num1 / num2; } /* 将字符转化成数字,并且修正当前的索引cur */ bool convertToNumber(int &cur,int &num,char * str) { num = 0; if(strlen(str) <= 0) return false; if(!isdigit(str[cur])) return false; while(isdigit(str[cur])) { num = num * 10 + str[cur] - '0'; if(num > maxInt)//溢出 return false; cur ++; } return true; } bool calc(char * str,int & res) { int strLen = strlen(str) ; if(strLen<= 0) return false; int cur = 0; if(!isdigit(str[cur])) { cout << "error char"<<endl; return false; } while(cur < strLen) { if(isdigit(str[cur]))//转化数字,压入exp栈中 { int num = 0; if(!convertToNumber(cur,num,str)) { cout <<"error" << endl; return false; } exp.push(num); continue; } else { switch(str[cur]) { case '+' : //如果是加号和减号则压入op case '-' : { op.push(str[cur]); cur ++; break; } case '/'://如果是乘法与和除法,弹exp栈,取一个数字计算结果,并将结果压入exp { int num; cur ++ ; if(convertToNumber(cur,num,str)) { int res = devide(exp.top(),num); exp.pop(); exp.push(res); break; } else { cout << "error" <<endl; return false; } } case '*': { int num; cur ++; if(convertToNumber(cur,num,str)) { int res = mutiple(exp.top(),num); exp.pop(); exp.push(res); break; } else { cout << "error" <<endl; return false; } } default: { cout << "error char" <<endl; } } } } while(!op.empty()) { if(exp.empty()) { cout << "error " <<endl; return false; } if(op.top() == '+') { int n1 = exp.top(); exp.pop(); int n2 = exp.top(); exp.pop(); exp.push(add(n1,n2)); } else if(op.top() == '-') { int n1 = exp.top(); exp.pop(); int n2 = exp.top(); exp.pop(); exp.push(minus(n1,n2)); } else { cout << "error char "<< endl; return false; } op.pop(); } if(exp.size() == 1) { res = exp.top(); exp.pop(); return true; } else return false; } int main() { char str[500]; freopen("in.txt","r",stdin); int result = 0; cin>>str; calc(str,result); cout << result <<endl; fclose(stdin); return 0; }
异常情况处理好麻烦啊。。。
发表评论
-
-在二元树中找出和为某一值的所有路径--捡捡递归的使用
2012-03-30 21:05 884/* 算法要求:打印从root到叶节点的路径上的权值和 为 ... -
二叉树的创建与四种遍历之递归版本
2011-08-21 21:59 1047#include <stdio.h> #i ... -
【zz】C++的内存管理
2011-08-17 10:35 1145来自http://blog.csdn.net/bizhu12/ ... -
floyd算法
2011-08-04 20:13 814/* 证明next[i][j] = k;是错误的例子 No ... -
[zz] Bloom filter
2011-06-29 15:48 1078Bloom Filter概念和原理 焦 ... -
【zz】并查集
2011-06-29 15:32 1331http://blog.sina.com.cn/s/blo ... -
[zz]catalan数的分析与应用
2011-06-25 22:09 1188性质 令h(0)=1,h( ... -
joj 1085: I Think I Need a Houseboat 半圆形侵蚀
2011-06-24 20:54 9341085: I Think I Need a Ho ... -
joj 1032 deck 重心的计算
2011-06-24 19:12 10911032: Deck Result TIME ... -
joj 1186 Box of Bricks 水题
2011-06-19 09:46 9231186: Box of Bricks Re ... -
***joj 1026 the staircase 利用递归、动态规划和一道类似题目
2011-06-18 19:27 1254转自网易何国涛的博客http://zhedahht.bl ... -
joj 1062 Computer Versus Mankind 非递归最大公约数 最小公倍数
2011-06-18 15:15 12121062: Computer Versus Mankin ... -
基本的排序:非递归的堆排序
2011-06-17 15:38 0void restore(int root,int le ... -
joj 1817: Triangle 三角形的判定
2011-06-15 20:34 12731817: Triangle Result ... -
×joj 1175 The Binomial Function 递归,递归优化,非递归
2011-06-15 19:32 8351175: The Binomial Functio ... -
joj 1146 标准输入+字符串反转
2011-06-15 18:02 11261146: Word Reversal Re ... -
joj 1149Binary Number 二进制移位操作
2011-06-15 09:50 9211149: Binary Numbers R ... -
joj 2484
2011-06-14 13:35 8072484: Chinese Character A ... -
**joj:1017 fire net 递归回溯的使用
2011-06-14 12:35 10561017: Fire Net Res ... -
joj 1014 the matrix 从八个方向遍历访问矩阵
2011-06-10 20:51 11671014: The Matrix Re ...
相关推荐
此计算器输入是一个复数和一个符号,一对一对的输入的方法进行,不能用括号; 但是支持复合运算,比如:"a+bi + c+di * e+fi ="之类的式子,由于是数据结构课程的实验,要求一定下载量,所以不用资源分,请大家帮我加点下载量...
c语言数据结构栈的四则运算(带括号)的实现,里面有解释
可以四则运算的计算器,可以按优先级计算,例如:(3+2*4-6)/2
以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用运算符优先关系,实现对算术四则混合运算表达式的求值。
10分不多用来刷分的, 随便你怎么评价, 评价后系统会还你11分的
switch(ah) //对运算符号的优先级进行选择,优先级高的先进行计算. { case '+': j=0; continue; break; case '-': j=0; continue; break; case '*': q=(struct four *)...
没想到不能免费下载,不过可以去我的博客那里拷贝我的代码来直接用
采用正则表达式的四则运算:在VBA环境中,如何使用正则表达式,将正则表达式应用到四则运算中的算是分解中。 Dim r1 As RegExp Dim m1 As Match Dim mc1 As MatchCollection Dim str As String Dim sstr As String ...
本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能: 由计算机从题库文件中...程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
编写一个程序可以完成基本的带括号的四则运算。其中除法(/)是整除,并且在负数除法时向0取整。(C/C++/Java默认的除法就是向0取整,python默认的是向负无穷取整。) 例如计算 100 * ( 2 + 12 ) - (20 / 3) * 2, 结果...
完整支持基本四则运算。但仅支持第一个运算数为负数的情况,暂不支持例如2+-3的算术式;不支持浮点运算;暂不支持带有括号的算术式(V2版本已新增支持)。程序可运行测试或使用。
完成度更高的带括号版本可以看C++实现四则运算器(带括号) 对于无括号的计算器,实现起来比较容易,下面让我们一步步实现。 举例 首先明确需要实现怎样的程序,对于无括号的计算器,大概做成这样就可以了: 52+34*3-...
四则运算c++源码(带注释详解,支持空格,括号与多位数字); 层次分明的c++代码,可读性较高; 计算过程经过测试完善,暂无发现bug; 欢迎新手大神一起交流~~
2016冀教版数学三年级上册第5单元《四则混合运算一》(不带括号的两级混合运算)教学课件
这是个仅用 对数组的操作 处理 带括号的四则运算 ,能对基本的四则运算式进行计算,拥有输入查错功能,对不科学的算术表达式输入将给出提示并自动退回上一步输入
实现大数六则运算的C++小计算器(带包含括号的优先级运算) 六则:加减乘除 乘方 求余 编程的思路发在了这篇文章里 : https://blog.csdn.net/X_P_X_P/article/details/122646365?spm=1001.2014.3001.5501 本人大一 学艺...
1.能随机出题, 题数由用户输入确定, 算术题包括加减乘除四则运算, 表达式项数应不限, 可以包含括号; 2.需要进行表达式的合法性验证; 3.用户交互输入答案; 4.计算机核对用户答案; 5.能对用户的测试评分;
可以进行代数的四则混合运算,包括带括号及加、减、乘法的运算,但是不支持除法运算。运算对象仅包括字母和整数,如3XY或3*X*Y,3*XY等。此工具非常适于进行数学公式的展开运算,由于暂不支持小数等系数的计算,可以...
有括号功能,四则运算功能,可用负号。其他的功能虽说不全,但是要扩展的话会很简单。 好不容易写出来的。有括号功能,四则运算功能,可用负号。其他的功能虽说不全,但是要扩展的话会很简单。 好不容易写出来的。有...
支持带括号的运算式,括号必须是英文状态下输入的括号;只支持第一个数为负数的情况;不支持浮点运算。程序可运行测试和使用。