嵌入式

编程与应用
posts - 14, comments - 1, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

初次使用栈编写的计算器

Posted on 2010-04-14 21:06 陈显锋 阅读(582) 评论(0)  编辑 收藏 引用 所属分类: 数据结构程序
 1#include<iostream>
 2#include<stack>
 3#include<math.h>
 4using namespace std;
 5#include<ctype.h>
 6
 7stack<float> s;
 8stack<char> cs;
 9
10int isp(char optr) 
11
12    switch (optr) 
13    
14    case '='return 0
15    case '('return 1
16    case '^'return 7
17    case '*'return 5
18    case '/'return 5
19    case '%'return 5
20    case '+'return 3
21    case '-'return 3
22    case ')'return 8
23    defaultreturn 0
24    }
 
25}
 
26
27int icp(char optr) 
28
29    switch (optr)
30    {
31    case '='return 0
32    case '('return 8
33    case '^'return 6
34    case '*'return 4
35    case '/'return 4
36    case '%'return 4
37    case '+'return 2
38    case '-'return 2
39    case ')'return 1
40    defaultreturn 0
41    }
 
42}
 
43
44
45void DoOperator(char oper)
46{
47    float oper1,oper2;
48    oper1=s.top();
49    s.pop();
50    oper2=s.top();
51    s.pop();
52    switch(oper)
53    {
54        case '+':s.push(oper2+oper1);break;
55        case '-':s.push(oper2-oper1);break;
56        case '*':s.push(oper2*oper1);break;
57        case '/':s.push(oper2/oper1);break;
58        case '^':s.push(pow(oper2,oper1));break;
59    }

60}

61
62void Run()
63{
64    char c;float newop;char y;
65    cs.push('=');
66    while(cin>>c,c!='=')
67        //if(c!='+'&&c!='-'&&c!='*'&&c!='/')
68        if(isdigit(c)||isalpha(c))
69        {
70            cin.putback(c);cin>>newop;
71            s.push(newop);
72        }

73        else if(c==')')
74            for(y=cs.top(),cs.pop();y!='(';y=cs.top(),cs.pop())
75                DoOperator(y);
76        else
77        {
78            for(y=cs.top(),cs.pop();icp(c)<=isp(y);y=cs.top(),cs.pop())
79                DoOperator(y);
80            cs.push(y);cs.push(c);
81        }

82    }

83    while(!cs.empty()){
84        y=cs.top();
85        cs.pop();
86        if(y!='=')
87            DoOperator(y);
88    }

89    cout<<s.top();
90}

91
92int main()
93{
94    Run();
95}

96

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理