表达式求值

Posted miaoz

tags:

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

额。

这个是按照慕课网上的老师讲的思路做出来的。

感觉递归真的好多用处。

拓展了可以求浮点数的多项式。

不过括号一定要用英文的 ,想了好久都不知道怎么把中文括号和英文括号统一起来判断, 主要是因为中文括号占多个字节 。

唉??........

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstdlib>
 4 using namespace std;
 5 double biaodas();
 6 double xiang();
 7 double yinz()//求一个因子的值
 8 {
 9     double res = 0;
10     char tem = cin.peek();//只看不拿走
11     if (tem == ()//因子可能是一个括号包起来的表达式,递归到求表达式
12     {
13         cin.get();
14         res = biaodas();
15         cin.get();
16     }
17     else//计算出多个十进制数字符连续组成的数的大小
18     {
19         while (isdigit(tem))//判断tem是不是十进制的字符
20         {
21             res = res * 10 + tem - 0;
22             cin.get();
23             tem = cin.peek();
24         }
25         if (tem == .)//判断有没有小数
26         {
27             double k = 10;
28             cin.get();
29             tem=cin.peek();
30             while (isdigit(tem))
31             {
32                 res += (tem-0) / k;
33                 k *= 10;
34                 cin.get();
35                 tem = cin.peek();
36             }
37         }
38     }
39     return res;
40 }
41 double xiang()//求一个多项式的值
42 {
43     double res = yinz();
44     int flag = 1;
45     while (flag)
46     {
47         char tem = cin.peek();
48         if (tem == * || tem == /)//判断乘除把多项式的求解分解为求多个因子的值
49         {
50             cin.get();
51             double va = yinz();
52             if (tem == *)
53                 res *= va;
54             else
55                 res /= va;
56         }
57         else flag = 0;
58     }
59     return res;
60 }
61 double biaodas()//求表达式的值
62 {
63     double res = xiang();
64     int flag = 1;
65     while (flag)
66     {
67         char tem = cin.peek();
68         if (tem == + || tem == -)//判断乘除把表达式的求解分解为求多多项式的值
69         {
70             cin.get();
71             double va = xiang();
72             if (tem == +)
73                 res += va;
74             else
75                 res -= va;
76         }
77         else flag = 0;
78     }
79     return res;
80 }
81 int main1()
82 {
83     cout << biaodas() << endl;
84     system("pause");
85     return 0;
86 }

 

以上是关于表达式求值的主要内容,如果未能解决你的问题,请参考以下文章

Java Eclipse 求值表达式

python 短路求值或惰性求值

Java 表达式中子表达式的求值顺序

表达式求值

中缀表达式求值的思路分析与代码实现

中缀表达式求值的思路分析与代码实现