我正在编写一个解码算术表达式的代码,如:4+3-2*6*(3+4/2)
为此,我需要将字符串中的运算符与优先级进行比较,如:
1. ( or )
2. * or /
3. + or -
有人可以告诉我如何比较两个角色。因为它们的ASCII值不是我想要的顺序!
答案 0 :(得分:2)
使用查找表。如果使用ASCII,它只是一个256元素的表。您可以使用char来索引它。
答案 1 :(得分:2)
为此我需要比较字符串中的运算符和优先级 像:
你可以做这样的事情来获得每个角色的优先权:
int get_precedence (char c) {
switch (c) {
case '+':
case '-': return 3;
case '*':
case '/': return 2;
case '(':
case ')': return 1;
default: return -1;
}
}
这使您可以根据需要添加其他字符。
但是,你仍然会遇到一些问题。例如,你如何告诉减法的一元否定?你需要查看上下文,因为答案将取决于之前的内容。处理中缀表示法是 hard 。
要自己动手,您需要撰写recursive descent parser或使用shunting yard algorithm。无论哪种方式,它都将是数百行 hard 代码。然后,您需要决定是从抽象语法树进行评估还是编译为字节代码。
我正在编写用于解决算术表达式的代码 像:
4+3-2*6*(3+4/2)
如果您想以简单的方式解决这个问题,您应该找到一个预先存在的库。 TinyExpr就是这样一种解决方案。它是开源的,包含在单个C源代码文件中。代码如下:
#include "tinyexpr.h"
double answer = te_interp("4+3-2*6*(3+4/2)", 0);
答案 2 :(得分:1)
即使在ASCII中,整数的顺序仍然相同。您可以比较一位数。例如:
if ('7' > '2')
将评估为真