C中是否有一个函数接收数学运算符作为字符并返回应该首先使用哪个运算符,或者一个接收两个运算符的函数,如果某个运算符应该先于另一个运算符,则返回1或0?
具体来说,我所说的数学运算符是^,*,/,+和 - 。我需要能够确定哪个应首先进入一堆运算符(或等待)。我能想到的唯一一件事就是编写5-10个不同的函数,非常具体地解决每个案例。
答案 0 :(得分:1)
它的实现并不像看起来那么困难。使用常量或enum
来表示特定的运算符,而不是使用字符本身。例如,OP_PLUS=0, OP_MINUS=1...
然后使用某种查找表,或者只是一个包含switch()
的普通函数,它获取每个运算符的优先级,作为从(比如)0到5的数字。所以,从某种意义上说,实现这个功能:
int get_precedence (Operator my_operator) {...}
其中“Operator”是列出不同运算符值的enum
。然后比较一个运算符是否具有比另一个运算符更高的优先级仅仅相当于在每个运算符上调用get_priority(),并查看哪个更高。
实现类似目标的快捷方法是为每个运营商分配号码,以便按优先顺序分配号码。因此,要比较优先级,您只需要比较代表运算符的数字。但我怀疑这会导致代码难以理解和维护。
任何这些方法的关键是分配一个数字(枚举,常数,等等)来表示每个运算符,并传递这些数字,而不是字符值。