js实现四则运算
2016-05-05 14:52
537 查看
js实现四则运算
思路:
把输入的中缀表达式转成后缀表达式,利用正则表达式来处理数字,然后利用栈来得出结果。
代码:
<script> var Stack = function(){} Stack.prototype={ Init:function(){ this.STACKMAX = 100; this.stack = new Array(this.STACKMACK); this.top = -1; return this.stack; }, isEmpty:function(){ if(this.top==-1){ return true; } else{ return false; } }, push:function(elem){ if(this.top==this.STACKMAX-1){ return "栈满"; } else{ this.top++; this.stack[this.top] = elem; } }, pop:function(){ if(this.top==-1){ return "空栈,无法删除栈顶元素!"; } else{ var x = this.stack[this.top]; this.top--; return x; } }, peek:function(){ if(this.top!=-1){ return this.stack[this.top]; } else{ return "空栈,顶元素无返回值!"; } }, Clear:function(){ this.top=-1; }, Length:function(){ return this.top+1; } } </script> <script type="text/javascript"> function getBackExpre(s){ var list=new Array(); var op=new Stack(); op.Init(); //var num=str.match(/\d+(\.\d+)?/g); var i=0; while(i<s.length){ var c=s.charAt(i); if(c>='0'&&c<='9'){ var s1=s.substr(i); var m=s1.match(/\d+(\.\d+)?/g); if (m.length>0){ s1=m[0]; list.push(s1); } i=i+s1.length; continue; }else if(c=='('){ op.push(c); }else if(c==')'){ var p=op.pop(); while(p!='('){ list.push(p); p=op.pop(); } }else if(c=='+'||c=='-'){ while(!op.isEmpty()&&(op.peek()=='+'||op.peek()=='-'||op.peek()=='*'||op.peek()=='/')){ list.push(op.pop()); } op.push(c); }else if(c=='*'||c=='/'){ while(!op.isEmpty()&&(op.peek()=='*'||op.peek()=='/')){ list.push(op.pop()); } op.push(c); } i++; } while(!op.isEmpty()){ list.push(op.pop()); } return list; } function g(a,b,c){ var v=0; a=parseFloat(a); b=parseFloat(b); switch (c) { case '+': v=a+b; break; case '-': v=a-b; break; case '*': v=a*b; break; case '/': v=a/b; break; } return v; } function getResult(list,result){ for (var i=0;i<list.length;i++){ if(!isNaN(list[i])){ result.push(list[i]); }else{ var b=result.pop(); var a=result.pop(); var v=g(a,b,list[i]); result.push(v); } } return result.pop(); } </script> <script> var str = window.prompt("input",str) ; //str 为要输入的四则运算表达式,b为结果 //var str="1.1+2.0*(3.0+4.0)"; var list=getBackExpre(str); var result=new Stack(); result.Init(); var b=getResult(list, result); document.write(b); </script>
测试:
相关文章推荐
- js 定制执行 setInterval 传参数
- JS 上传下载
- Javascript深入浅出学习笔记(10)
- JSON风格指南
- JavaScript学习记录
- js读取json文件数据
- JavaScript 分页组件定义
- javascript动态添加、修改、删除对象的属性与方法
- list 、map、bean、json互转
- js ajaxfileupload.js上传报错的解决方法
- javascript执行环境及作用域详解
- 简述文件上传原理之 jsp - servlet 篇
- javascript笔记——placehold
- javaScript学习笔记——跟时间有关的函数
- Javascript 面向对象编程(一):封装
- JS学习笔记(一)DOM事件和监听
- 使用js加载器动态加载外部Javascript文件
- json-path解析json方便可靠
- JavaScript学习总结(二十)——Javascript非构造函数的继承
- JavaScript学习总结(十九)——JavaScript获取浏览器类型与版本