嵌入式
编程与应用
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
>
4
using
namespace
std;
5
#include
<
ctype.h
>
6
7
stack
<
float
>
s;
8
stack
<
char
>
cs;
9
10
int
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
default
:
return
0
;
24
}
25
}
26
27
int
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
default
:
return
0
;
41
}
42
}
43
44
45
void
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
62
void
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
92
int
main()
93
{
94
Run();
95
}
96
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
树的非递归算法(第一次用手写的代码)
自己编的计算器类(使用自定义链式栈)
链式栈及用其测试的计算器
编写用链表实现的多项式的加法和乘法运算
初次使用栈编写的计算器
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 陈显锋
日历
<
2010年4月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
c/c++(2)
非技术区(1)
封装
技术交流(4)
数据结构程序(5)
随笔档案
2012年5月 (2)
2012年4月 (3)
2012年3月 (3)
2010年4月 (6)
搜索
最新评论
1. re: 高斯约旦求矩阵的逆
这不是高斯约旦算法
--zhan