比较字符

时间:2016-02-05 20:01:05

标签: c char

我正在编写一个解码算术表达式的代码,如:4+3-2*6*(3+4/2)

为此,我需要将字符串中的运算符与优先级进行比较,如:

1. ( or )
2. * or /
3. + or -

有人可以告诉我如何比较两个角色。因为它们的ASCII值不是我想要的顺序!

3 个答案:

答案 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')将评估为真