C++实现简单计算器的具体代码,供大家参考,具体内容如下
要求:输入一个包含+ - * /的非负整数计算表达式,计算表达式的值,每个字符之间需有一个空格,若一行输入为0,则退出程序。
输入样例:
4 + 2 * 5 - 7 / 11
输出样例:
13.36
实现代码:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#include <iostream>
#include <stack>
using namespace std;
char str[200]; //保存表达式字符串
int mat[][5]={ //设置优先级1表示优先级较大,0表示较小
1,0,0,0,0,
1,0,0,0,0,
1,0,0,0,0,
1,1,1,0,0,
1,1,1,0,0,
};
stack< int > op; //运算符栈
stack< double > in; //数字栈
void getOp( bool &reto, int &retn, int &i){
if (i==0&&op.empty()== true ){
reto= true ;
retn=0;
return ;
}
if (str[i]==0){
reto= true ;
retn=0;
return ;
}
if (str[i]>= '0' &&str[i]<= '9' ){
reto= false ;
} else {
reto= true ;
if (str[i]== '+' ){
retn=1;
} else if (str[i]== '-' ){
retn=2;
} else if (str[i]== '*' ){
retn=3;
}
else if (str[i]== '/' ){
retn=4;
}
i+=2;
return ;
}
retn=0;
for (;str[i]!= ' ' &&str[i]!=0;i++){
retn*=10;
retn+=str[i]- '0' ;
}
if (str[i]== ' ' ){
i++;
}
return ;
}
int main( int argc, char *argv[])
{
while ( gets (str)){
if (str[0]== '0' &&str[1]==0) break ;
bool retop; int retnum;
int idx=0;
while (!op.empty()) op.pop();
while (!in.empty()) in.pop();
while ( true ){
getOp(retop,retnum,idx);
if (retop== false ){
in.push(( double )retnum);
}
else {
double tmp;
if (op.empty()== true ||mat[retnum][op.top()]==1){
op.push(retnum);
}
else {
while (mat[retnum][op.top()]==0){
int ret=op.top();
op.pop();
double b=in.top();
in.pop();
double a=in.top();
in.pop();
if (ret==1) tmp=a+b;
else if (ret==2) tmp=a-b;
else if (ret==3) tmp=a*b;
else tmp=a/b;
in.push(tmp);
}
op.push(retnum);
}
}
if (op.size()==2&&op.top()==0) break ;
}
printf ( "%.2f\n" ,in.top());
}
return 0;
}
|
测试输出:
2 + 4 * 2 - 2
8.00
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/m0_37036984/article/details/78984264