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