计算器 栈 带括号 2016 10 21

#include<iostream>
#include<stack>
#include<string>
#include<cmath>
using namespace std;

int GetNum(string s){ 
 string ss;
 ss = s;
 int len = ss.length();
 int sum = 0;
 int count=0; 
 for(int i=0;i<len;i++){
  if(ss[i]>=‘0‘&& ss[i]<=‘9‘){
              sum = (ss[i]-‘0‘)+ sum*10;
                count++;
  }
  else if(count!=0) break;  
 }
 return sum;
}

string CutNum(string s){
 string ss,s1;
 ss = s;
 s1 = "";
    int t;
 int len = ss.length();
    for(int i=0;i<len;i++){
     if(ss[i]<‘0‘||ss[i]>‘9‘){
        t=i;
     break; 
  }
 }
 
 if(t==0) return s1;
 
 for(int j=t;j<len;j++){
  s1+=ss[j];
 }
 
 return s1; 
}

string CutOpra(string s){
 string ss,s1;
 ss = s;
 s1="";
    int t=0;
 int len = ss.length();
 
 if(len==1) return s1;
 
    for(int i=0;i<len;i++){
     if(ss[i]<‘0‘|| ss[i]>‘9‘){
        t=i;
     break; 
  }
 }
 
 for(int j=t+1;j<len;j++){
  s1+=ss[j];
 }
 
 return s1; 
}

char GetOpra(string s){
 string ss,s1;
 ss = s;
    int t;
 int len = ss.length();
    for(int i=0;i<len;i++){
     if(ss[i]<‘0‘||ss[i]>‘9‘){
        t=i;
     break; 
  }
 }
 char ts;
 ts = ss[t];
 return  ts;
}

//a 栈顶元素
int Level(char a,char b){         // 优先级比较   大于return1   等于return0   小于return-1
 
 if(a==‘+‘&&(b==‘*‘||b==‘/‘||b==‘(‘))                                                 return 1;
 else if(a==‘+‘&&(b==‘+‘||b==‘-‘||b==‘#‘||b==‘)‘))                                    return -1;
 
 else if(a==‘-‘&&(b==‘*‘||b==‘/‘||b==‘(‘))                                            return 1;
 else if(a==‘-‘&&(b==‘+‘||b==‘-‘||b==‘#‘||b==‘)‘))                                    return -1;
 
 else if(a==‘*‘&& b==‘(‘)                                                             return 1;
 else if(a==‘*‘&&(b==‘*‘||b==‘/‘||b==‘+‘||b==‘-‘||b==‘#‘||b==‘)‘))                    return -1;
 
 else if(a==‘/‘&&(b==‘(‘))                                                            return 1;
 else if(a==‘/‘&&(b==‘*‘||b==‘/‘||b==‘+‘||b==‘-‘||b==‘#‘||b==‘)‘))                    return -1;

else if(a==‘(‘&&(b==‘+‘||b==‘-‘||b==‘*‘||b==‘/‘||b==‘(‘))                            return 1;
 else if(a==‘(‘&& b==‘)‘)                                                             return 2;
 
 else if(a==‘)‘&&(b==‘+‘||b==‘-‘||b==‘*‘||b==‘/‘||b==‘)‘||b==‘#‘))                    return 1;

else if(a==‘#‘&&(b==‘+‘||b==‘-‘||b==‘*‘||b==‘/‘||b==‘(‘))                            return 1;
    else if(a==‘#‘&&b==‘#‘)                                                              return 0;
 
 else return 100000;
}

void run(){
 string s;
 getline(cin,s,‘\n‘);
 stack<int> OPND;
 stack<char> OPTR;
    OPTR.push(‘#‘);

while(s!=""){
     cout<<s<<endl;
     cout<<s[0]<<endl;
     if(s[0]<‘0‘||s[0]>‘9‘){
        char ts = GetOpra(s);
        cout<<"ts="<<ts<<endl;
        s=CutOpra(s);
        cout<<"CutOpra(s)=="<<s<<endl;
            cout<<"OPTR.top()="<<OPTR.top()<<endl;
     while(Level(OPTR.top(),ts)==-1) {
             int a,b;
             a = OPND.top();
             OPND.pop();
             b =  OPND.top();
             cout<<"a=="<<a<<"  "<<"b=="<<b<<endl;
             OPND.pop();
             if(OPTR.top()==‘*‘)  OPND.push(a*b);
             if(OPTR.top()==‘/‘)  OPND.push(b/a);
             if(OPTR.top()==‘+‘)  OPND.push(a+b);
             if(OPTR.top()==‘-‘)  OPND.push(b-a);
             cout<<"OPND.top()=="<<OPND.top()<<endl;
             OPTR.pop();
       cout<<"OPtR.top()=="<<OPTR.top()<<endl;
          
       }
      while(Level(OPTR.top(),ts)==1) {
             OPTR.push(ts);
             break;
     }
           if(Level(OPTR.top(),ts)==2){
                OPTR.pop();
                ts = ‘ ‘;
                cout<<"OPtR.top()=="<<OPTR.top()<<endl;
     }
       if(Level(ts,OPTR.top())==0) {
        
           cout<<"zhangding="<<OPTR.top()<<endl;
           OPTR.pop();
           break;
   }  
  }
  
     else{
     
     int a = GetNum(s);
       OPND.push(a);
       s=CutNum(s);
  }
 }
 
 
 
 
    while(!OPTR.empty()){
     
         cout<<"zhangding="<<OPTR.top()<<endl;
         OPTR.pop();
     
     int a,b;
         a = OPND.top();     cout<<"a="<<a<<endl;
         OPND.pop();
         b =  OPND.top();    cout<<"b="<<b<<endl;
         OPND.pop();
         if(OPTR.top()==‘*‘)  OPND.push(a*b);
         if(OPTR.top()==‘/‘)  OPND.push(b/a);
         if(OPTR.top()==‘+‘)  OPND.push(a+b);
         if(OPTR.top()==‘-‘)  OPND.push(b-a);
         OPTR.pop();
  }
  
  cout<<"OPND.top()="<<OPND.top()<<endl;

}

int main(){
 run();
 return 0;
}

时间: 2024-11-25 19:33:06

计算器 栈 带括号 2016 10 21的相关文章

2016.10.21 韬光养晦

今天用IDEA来试写一下java代码,界面确实不错,不过要适应一下新IDE 1.UTF-8是国际通用编码,其英文占一个字节,中文占三个字节,而GBK怎是国内的一种编码格式,其中中英文均占两个字节 2.数组的创建 a.数组如果只申明数组长度的话,则个数据类型的初始值如下图所示 byte[] byteArray = new byte[1]; char[] charArray = new char[1]; int[] intArray = new int[1]; long[] longArray =

2016.10.21总结

HTML课程总结 结束了为期3天多的HTML课程,算是稍微放松了一下,但又被随后的CSS预习内容打击了,使我又进入紧张的状态,毕竟,即是老师说简单也不是相对现阶段的我而言的,我还是要认真对待. 报名之前,我在网上找培训机构,找自己感兴趣的编程语言,经常刷知乎,论坛和贴吧,然后也看到大部分人认为作为程序员,编程就是解决问题,编程思维才是最重要的,这一点我自己是很认同的,要完善自己写的程序,就必须时刻保持好奇心和养成研究的习惯,在HTML的课程中我也是这么要求自己的. 在开课前,我看视频把HTML课

2016/10/21 java中的参数传方式

参考:http://blog.sina.com.cn/s/blog_59ca2c2a0100qhjx.html http://www.cnblogs.com/caiyao/p/4964176.html

科学计算器(可实现带括号的浮点数四则运算)

/* Name: 科学计算器(可实现带括号的浮点数四则运算) Copyright: Author: Date: 15-09-14 21:49 Description: 从文件读入计算表达式,将计算表达式转换为逆波兰表达式,然后计算出逆波兰表达式的值,最后输出答案. */ #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<math.h> #define MAXSIZE 200 vo

表达式求值:从“加减”到“带括号的加减乘除”的实践过程

本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee ● 为什么想做一个表达式求值的程序 最近有一个需求,策划想设置游戏关卡的某些数值,这个数值不是一个常量,而是根据关卡的某些环境数据套上一个计算表达式算出来的.这个需求无法用excel拖表预计算出,因为关卡的环境数据只有在游戏中才能产生,在excel制表时,这些都是未知的.作为程序员,我可以把计算表达式硬编码在代码中,但这个做法有缺陷,如果策划要修改计算表达式的话,只能通过我修改程序并

python装饰器带括号和不带括号的语法和用法

装饰器的写法补充: 通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号.下面通过两个例子还看. 一般装饰器的写法: 1 def log(func=None): 2 3 def inner(*args, **kwargs): 4 print('do something before') 5 res = func(*args, **kwargs) 6 print('do something after') 7 return

c++ new带括号和不带括号

在new对象的时候有加上(),有不加(),不知道这个到底是什么区别?比如:CBase *base = new CDerived();CBase *base = new CDeviced; 很多人都说,加括号调用没有参数的构造函数,不加括号调用默认构造函数或唯一的构造函数.这是有问题的. 对于自定义类类型: 如果该类没有定义构造函数(由编译器合成默认构造函数)也没有虚函数,那么class c = new class;将不调用合成的默认构造函数,而class c = new class();则会调用

同侪隐修录&#160;(2016-12-25 23:10:21)转载▼

同侪隐修录 (2016-12-25 23:10:21)转载▼ 标签: 武术史 武学 孙氏拳前辈多隐修者,不仅孙存周先生1949年后基本处于隐修状态,鲜与武术界往来,同辈中武艺高明者如裘徳元.齐公博等先生亦如是.这种隐修的气质在孙门内颇为普遍,及至我辈,同侪中之武艺高明者几乎皆如此,如董岳山.陈垣.牟八爷.驼五爷.肖德昌等,不一而足.即使是以票友自称的侪辈高手,如圆觉和尚.胡六爷.何回子.支一峰.刘子明等先生也是隐修自娱,鲜为人知.其他人如张兆麒.李梦庚.章仲华.关秉之.张烈等先生其为人大体也是此

每周进度及工作量统计——2016.10.13-2016.10.20

项目:四则运算出题程序--GUI支持和改进 项目类型:结对项目 项目成员:张金生    张政 项目完成情况:已完成 项目改进:已变更,GUI支持,错题本,倒计时等 项目日期:2016.10.11-2016.10-13 C类别 C内容 S开始时间 E结束时间 I间隔 T净时间 P预计时间 分析 改进设计  9:25  10:39  9  65  60 编码 功能优化  10:42  22:43  163  557  500   补全功能 +18:18 +21:54  47  169  240 编码