- 浏览: 146858 次
- 性别:
- 来自: 帝都
文章分类
最新评论
-
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 930/* 算法要求:打印从root到叶节点的路径上的权值和 为 ... -
二叉树的创建与四种遍历之递归版本
2011-08-21 21:59 1104#include <stdio.h> #i ... -
【zz】C++的内存管理
2011-08-17 10:35 1202来自http://blog.csdn.net/bizhu12/ ... -
floyd算法
2011-08-04 20:13 848/* 证明next[i][j] = k;是错误的例子 No ... -
[zz] Bloom filter
2011-06-29 15:48 1149Bloom Filter概念和原理 焦 ... -
【zz】并查集
2011-06-29 15:32 1405http://blog.sina.com.cn/s/blo ... -
[zz]catalan数的分析与应用
2011-06-25 22:09 1376性质 令h(0)=1,h( ... -
joj 1085: I Think I Need a Houseboat 半圆形侵蚀
2011-06-24 20:54 9791085: I Think I Need a Ho ... -
joj 1032 deck 重心的计算
2011-06-24 19:12 11311032: Deck Result TIME ... -
joj 1186 Box of Bricks 水题
2011-06-19 09:46 9581186: Box of Bricks Re ... -
***joj 1026 the staircase 利用递归、动态规划和一道类似题目
2011-06-18 19:27 1303转自网易何国涛的博客http://zhedahht.bl ... -
joj 1062 Computer Versus Mankind 非递归最大公约数 最小公倍数
2011-06-18 15:15 12431062: Computer Versus Mankin ... -
基本的排序:非递归的堆排序
2011-06-17 15:38 0void restore(int root,int le ... -
joj 1817: Triangle 三角形的判定
2011-06-15 20:34 13411817: Triangle Result ... -
×joj 1175 The Binomial Function 递归,递归优化,非递归
2011-06-15 19:32 8721175: The Binomial Functio ... -
joj 1146 标准输入+字符串反转
2011-06-15 18:02 11691146: Word Reversal Re ... -
joj 1149Binary Number 二进制移位操作
2011-06-15 09:50 9641149: Binary Numbers R ... -
joj 2484
2011-06-14 13:35 8552484: Chinese Character A ... -
**joj:1017 fire net 递归回溯的使用
2011-06-14 12:35 11171017: Fire Net Res ... -
joj 1014 the matrix 从八个方向遍历访问矩阵
2011-06-10 20:51 12091014: The Matrix Re ...
相关推荐
此计算器输入是一个复数和一个符号,一对一对的输入的方法进行,不能用括号; 但是支持复合运算,比如:"a+bi + c+di * e+fi ="之类的式子,由于是数据结构课程的实验,要求一定下载量,所以不用资源分,请大家帮我加点下载量...
当我们面对一个复杂的包含括号的四则运算表达式时,如何有效地计算结果成为一个挑战。此时,栈可以帮助我们解决这一问题: 1. **操作数栈**:用来存储数字。 2. **运算符栈**:用来存储运算符。 #### 三、具体实现...
以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用运算符优先关系,实现对算术四则混合运算表达式的求值。
本文详细介绍了一个使用链表来处理不含括号的简单四则运算的C语言程序。通过合理的数据结构设计和算法逻辑,程序能够有效地处理用户的输入,并准确地计算出表达式的结果。此程序不仅展示了链表的应用,还涉及了基础...
基于模板类,栈的简单四则运算C++实现,基于模板类,栈的简单四则运算C++实现,基于模板类,栈的简单四则运算C++实现,基于模板类,栈的简单四则运算C++实现,
5. 没有括号的四则运算遵循从左到右的顺序,这是基础的计算规则。 6. 除法算式中,除数不能为0,因为除以0没有定义。 7. 包含括号的表达式如[486+(328-114)]×3,首先执行括号内的运算,然后加法,最后乘法。 8...
10分不多用来刷分的, 随便你怎么评价, 评价后系统会还你11分的
在C#编程语言中,构建一个能够处理带括号的四则运算的计算器是一项常见的任务。这个项目涉及到了字符串解析、表达式求值等多个关键知识点。以下是对这些知识点的详细阐述: 1. **字符串解析**:在描述中提到的...
完成度更高的带括号版本可以看C++实现四则运算器(带括号) 对于无括号的计算器,实现起来比较容易,下面让我们一步步实现。 举例 首先明确需要实现怎样的程序,对于无括号的计算器,大概做成这样就可以了: 52+34*3-...
在编程领域,四则运算(加法、减法、乘法和除法)是基本的操作,对于任何编程语言,包括C++,都是不可或缺的一部分。在实际应用中,我们需要处理各种类型的数值,包括正数、负数以及可能存在的空格。在"Qt之加减乘除...
本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能: 由计算机从题库文件中...程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
采用正则表达式的四则运算:在VBA环境中,如何使用正则表达式,将正则表达式应用到四则运算中的算是分解中。 Dim r1 As RegExp Dim m1 As Match Dim mc1 As MatchCollection Dim str As String Dim sstr As String ...
这款计算器实现了四则运算(加、减、乘、除)以及括号内的嵌套计算,能够正确处理运算符优先级和括号之间的关系,为用户提供准确的计算结果。它基于.NET Framework 3.5平台,确保了在多种操作系统环境下的兼容性。 ...
该汇编程序是一个简单的四则运算计算器,支持加、减、乘、除以及括号运算。用户通过键盘输入表达式,程序会解析输入并执行计算。以下是对程序关键部分的详细解释: 1. **数据段定义(DSEG)**: - `STR1` 到 `STR...
《四年级下册数学四则运算PPT教案》是一份专为四年级学生设计的教学课件,主要关注数学中的四则运算,包括加法、减法、乘法和除法。该教案旨在帮助学生深入理解和掌握含有两级运算的运算顺序,正确地解决三步计算的...
教学目标不仅仅是让学生学会如何进行带中括号的四则运算,更重要的是让他们能够独立思考,提高正确率,并养成良好的学习习惯。教学的重点在于理解运算的顺序,即在含有小括号和中括号的表达式中,首先需要计算小括号...
编写一个程序可以完成基本的带括号的四则运算。其中除法(/)是整除,并且在负数除法时向0取整。(C/C++/Java默认的除法就是向0取整,python默认的是向负无穷取整。) 例如计算 100 * ( 2 + 12 ) - (20 / 3) * 2, 结果...
首先,我们来看"四则运算(带括号).cpp"这个文件。在C语言中,处理带有括号的表达式通常涉及解析算法,这可能使用到了递归下降解析或使用栈数据结构。括号用于改变运算的优先级,因此正确地处理它们是至关重要的。...