中缀表达式转换成后缀表达式(只适用于加减乘除运算)

 1 #include <iostream>
 2 #include <stack>
 3 #include <cctype>
 4 
 5 using namespace std;
 6 
 7 //获取符号的优先级
 8 int getPriority(char c)
 9 {
10     int priority = -1;
11     switch (c) {
12     case '+':
13         priority = 1;
14         break;
15     case '-':
16         priority = 1;
17         break;
18     case '*':
19         priority = 2;
20         break;
21     case '/':
22         priority = 2;
23         break;
24     case '(':
25         priority = 3;
26         break;
27     default:
28         break;
29     }
30     return priority;
31 }
32 
33 
34 int main()
35 {
36     char c;
37     stack<char> s;
38     cin >> c;
39     while (c != '#')
40     {
41         while (isdigit(c))
42         {
43             cout << c;
44             cin >> c;
45             if(!isdigit(c) && c != '#')
46                 cout << ' ';
47 
48         }
49         if (c == ')')
50         {
51             //1.弹出元素并输出直到'('
52             while (s.top() != '(')
53             {
54                 cout << s.top() << ' ';
55                 s.pop();
56             }
57             //2.将"("也出栈
58             s.pop();
59         }
60         else
61         {
62             // 下面是普通操作符的情况
63             // 1.弹出栈元素直到发现优先级更低的元素
64             while (!s.empty() && getPriority(c) <= getPriority(s.top()) && s.top() != '(')
65             {
66                 cout << s.top() << ' ';
67                 s.pop();
68             }
69             //将本操作符入栈
70             s.push(c);
71         }
72         cin >> c;
73     }
74     while (!s.empty())
75     {
76         cout << s.top() << ' '  ;
77         s.pop();
78     }
79     cout << endl;
80     return 0;
81 }

猜你喜欢

转载自www.cnblogs.com/FengZeng666/p/9448927.html