实现一个简单的 eval 函数计算加减法和括号
来源:互联网 发布:歌曲剪辑软件安卓版 编辑:程序博客网 时间:2024/06/05 09:58
实现一个简单的 eval 函数
题目
写一个 eval 函数,其输入是含有数字,加减符号和小括号的表达式字符串,比如5+12-(4+21),要求输出其值,即 eval(“5+12-(4+21)") = 8。
思路
- 由于只有加减符号,所以不用考虑其他运算符结合的优先级
- 括号优先级比较高,当遇到一个")"时,就计算一个括号内表达式的值
- 在没有遇到")"的时候,可以将数据保存到栈中。当遇到非")"时,字符进栈;否则,依次弹出字符进行计算,直到弹出"(",将计算结果进栈。注:如果查到栈顶,没有匹配的"(",可直接报错。
- 当遇到"\0"时,表示到字符串结尾了,将栈内元素依次弹出计算,得出的结果。注:此时如果栈内仍有"(",可直接报错,表达式错误。
代码
public static int eval(String expression) { Stack<String> stack = new Stack<String>(); int token = 0; for (int i = 0; i < expression.length(); i++) {// 遍历数组的 if (expression.charAt(i) <= '9' || expression.charAt(i) >= '0') { token = expression.charAt(i) - '0' + token * 10; // 超过1位的数字合成 } else {// 是运算符号 // 将数字内容进栈 stack.push("" + token); token = 0; // 括号情况下不重复进栈 if (expression.charAt(i) == '(') { stack.pop(); } if (expression.charAt(i) == '+' || expression.charAt(i) == '-' || expression.charAt(i) == '(') { stack.push("" + expression.charAt(i)); // 将运算符进栈 } else if (expression.charAt(i) == ')') { // 计算括号内内容 Stack<String> tmpStack = new Stack<String>(); while (!stack.isEmpty()) { String tmpStr = stack.pop(); if (tmpStr.equals("(")) { break; } else { tmpStack.push(tmpStr); } } token = Integer.valueOf(tmpStack.pop()); while (!tmpStack.isEmpty()) { String op = tmpStack.pop(); if (op.equals("+")) { token += Integer.valueOf(tmpStack.pop()); } else if (op.equals("-")) { token -= Integer.valueOf(tmpStack.pop()); } }// end while } }// end if-else }// end for // 将当前操作数进栈 stack.push("" + token); token = 0; // 计算栈内结果 Stack<String> tmpStack = new Stack<String>(); while (!stack.isEmpty()) { tmpStack.push(stack.pop()); } token = Integer.valueOf(tmpStack.pop()); while (!tmpStack.isEmpty()) { String op = tmpStack.pop(); if (op.equals("+")) { token += Integer.valueOf(tmpStack.pop()); } else if (op.equals("-")) { token -= Integer.valueOf(tmpStack.pop()); } }// end while return token; }
0 0
- 实现一个简单的 eval 函数计算加减法和括号
- 函数计算-建立一个简单的数学计算函数场景
- 设计一个一元稀疏多项式简单的加减法计算器
- 设计一个一元稀疏多项式简单的加减法计算器
- Oracle 的加减法函数
- 一个mfc实现的简单计算功能
- python实现一个简单泰勒的计算
- 实现大数的加减法
- 实现一个函数,计算一个字符串的值,该字符串中只有+ - * /四种运算符, 没有括号。 //参数mathString:要计算的字符串; //返回值:把计算出来的结果返回 例如:传入:@"1+2-1
- eval()一个有意思的PHP函数
- Oracle中实现javascript中的Eval函数计算效果
- 简单说 eval( )函数
- 对于js中eval()函数的理解 和 写一个函数trim() 去掉字符串左右空格
- 实现JavaScript中eval()函数的功能
- 含括号和四则运算符的简单表达式的计算【c++ 50 lines】
- c++实现简单eval
- 错位加减法的简单应用
- Java类中获取文件的方式以及实现一个类似js中的eval函数
- 1212淘宝精选店铺红包
- 网络 发一个Long类型的数转化为字节数组从客户端发到服务端
- 第四章 字符串 思维导图
- android自定义布局中的平滑移动
- Android使用意图传递数据之全局变量
- 实现一个简单的 eval 函数计算加减法和括号
- 【Android】状态栏通知Notification、NotificationManager详解
- LeetCode[Tree]: Sum Root to Leaf Numbers
- 由于上一篇博客没有写好JSON解析,这一篇对上一篇进行改进
- Android中px与dip,sp的转化
- Java开发中的23种设计模式详解 .
- Win7关闭休眠的方法
- android:点击popupwindow以外区域 popupwindow自动消失
- 黑马程序员——(二)数据类型