c - 一个在运算符之间进行比较的 C 函数

标签 c

C 中是否有一个函数可以接收数学运算符作为字符并返回应首先使用的运算符,或者是否有一个函数可以接收两个运算符并在某个运算符应出现在另一个运算符之前时返回 1 或 0?

具体来说,我所说的数学运算符是 ^、*、/、+ 和 -。我需要能够确定哪个应该首先进入运算符堆栈(或等待)。我唯一能想到的就是编写 5-10 个不同的函数来非常具体地解决每种情况。

最佳答案

实现起来并不像看起来那么困难。使用常量或枚举来表示特定的运算符,而不是使用字符本身。例如,OP_PLUS=0, OP_MINUS=1...

然后使用某种查找表,或者只是一个包含 switch() 的普通函数,它获取每个运算符的优先级,作为从(例如)0 到 5 的数字。所以,从某种意义上来说,实现这个功能:

int get_precedence (Operator my_operator) {...}

其中“Operator”是列出不同运算符值的枚举。然后比较一个运算符是否比另一个运算符具有更高的优先级,只需对每个运算符调用 get_priority() ,然后查看哪个运算符更高。

实现类似目标的一种快速但肮脏的方法是为每个运算符分配编号,以便按优先级顺序分配编号。因此,要比较优先级,您所要做的就是比较代表运算符的数字。但我怀疑这会导致代码难以理解和维护。

任何这些方法的关键是分配一个数字(枚举、常量等)来表示每个运算符,并传递这些数字,而不是字符值。

关于c - 一个在运算符之间进行比较的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045682/

相关文章:

Calloc/Malloc 并经常释放或释放太大的空间?

从 windows 和 mac 通过 ssh 编译和运行 C 程序 -- windows 出现 seg 错误

c - 无法在控制台上打印简单的嵌套 if 条件结果

c - 如何将带小数点的有符号数解释为 C 代码中的实际值(256 -> 4)

c - 扩展c中字符串数组的大小

android - 想编译原生安卓二进制我可以在手机终端运行

c - && 条件作为||在 c 中做 while 循环

c++ - 向窗口应用程序发送 WM_CHANGEUISTATE 后,当使用鼠标访问菜单时,助记符不会显示在系统菜单上

c - C Pipe 中的 Unix Shell 问题

iphone - 类名前应为 ')'