3-6 中缀表达式转换成后缀表达式

Posted hi3254014978

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3-6 中缀表达式转换成后缀表达式相关的知识,希望对你有一定的参考价值。

1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludextgmath.h(214): warning C4602: #pragma pop_macro:“new”该标识符前面没有 #pragma push_macro
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludextgmath.h(215): warning C4193: #pragma warning(pop) : 没有匹配的“#pragma warning(push)”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludextgmath.h(216): warning C4161: #pragma pack(pop...) : 出栈的比入栈的多
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(23): error C2061: 语法错误: 标识符“abs”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(23): error C2059: 语法错误:“;”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(23): error C2061: 语法错误: 标识符“acos”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(23): error C2061: 语法错误: 标识符“asin”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(24): error C2061: 语法错误: 标识符“atan”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(24): error C2059: 语法错误:“;”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(24): error C2061: 语法错误: 标识符“atan2”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(24): error C2061: 语法错误: 标识符“ceil”
1>e:极速考拉下载目录vs2013(visual studio 2013旗舰版)vcincludecmath(25): error C2061: 语法错误: 标识符“cos”

若是switch单词写错了,则可能会出现上述错误。

输入1:

 2+3*(7-4)+8/4#
输入2:
 ((2+3)*4-(8+2))/5#
 1 #include <iostream>
 2 #include <cctype>
 3 #include <stack>
 4 using namespace std;
 5 
 6 int getPriority(char ch)
 7 {
 8     int priority = 0;
 9     switch(ch)
10     {
11         case +:
12             priority = 1;
13             break;
14         case -:
15             priority = 1;
16             break;
17         case *:
18             priority = 2;
19             break;
20         case /:
21             priority = 2;
22             break;
23         case (:
24             priority = 3;
25             break;
26         default:
27             priority = 0;
28             break;
29     }
30     return priority;
31 }
32 
33 
34 int main()
35 {
36     std::stack<char> S;
37     char ch;
38     cin >> ch;
39     while (ch != #)
40     {
41         while (isdigit(ch))
42         {
43             cout << ch;
44             cin >> ch;
45             if(!isdigit(ch))        //ch 不是数字且不是‘#‘, 表示完成了一个整型数据的输入,此时打印一个空格
46                 cout << " ";
47             
48 
49         }
50         if (ch == #)
51             break;
52         if (ch == ))                    //如果读入的字符是‘)‘,那么当栈顶元素不是‘(’时,一直输出栈顶元素
53         {
54             while (S.top() != ()
55             {
56                 cout  << S.top()<< " ";
57                 S.pop();
58             }
59             S.pop();
60         }
61         else     //正常情况,将ch和栈顶字符比较优先级
62         {
63             while (!S.empty() && S.top() != ( && getPriority(S.top()) >= getPriority(ch))
64             {
65                 cout << S.top()<< " " ;
66                 S.pop();
67             }
68             S.push(ch);
69 
70         }cin >> ch;
71     }
72 
73     while (!S.empty())
74     {
75         cout << S.top();
76         S.pop();
77         if (!S.empty())
78             cout << " ";
79     }
80 
81     return 0;
82 }

 












以上是关于3-6 中缀表达式转换成后缀表达式的主要内容,如果未能解决你的问题,请参考以下文章

C语言后缀表达式转换成中缀表达式

中缀表达式转换成后缀表达式并求值

表达式树—中缀表达式转换成后缀表达式

中缀表达式转换成前缀表达式和后缀表达式的极其简单方法

C/C++ 中缀表达式转换成后缀表达式并求值

中缀表达式转成后缀表达式