算符优先关系表 c++实现
时间: 2023-10-28 20:04:14 浏览: 89
C++运算符优先级表格
算符优先关系表是一个二维数组,用于描述运算符的优先级关系。在C语言中,可以使用多维数组或结构体数组来实现算符优先关系表。
以下是使用多维数组实现算符优先关系表的示例代码:
```c
#include <stdio.h>
// 定义算符优先关系表
int priority_table[7][7] = {
// + - * / ( ) #
{ 1, 1,-1,-1,-1, 1,-1 }, // +
{ 1, 1,-1,-1,-1, 1,-1 }, // -
{ 1, 1, 1, 1,-1, 1,-1 }, // *
{ 1, 1, 1, 1,-1, 1,-1 }, // /
{-1,-1,-1,-1,-1, 0,-2 }, // (
{ 1, 1, 1, 1,-2, 1, 1 }, // )
{-1,-1,-1,-1,-1,-2, 0 } // #
};
// 根据算符优先关系表判断两个算符的优先级关系
int compare(char op1, char op2)
{
int index1, index2;
switch (op1) {
case '+': index1 = 0; break;
case '-': index1 = 1; break;
case '*': index1 = 2; break;
case '/': index1 = 3; break;
case '(': index1 = 4; break;
case ')': index1 = 5; break;
case '#': index1 = 6; break;
default: return -2; // 非法的运算符
}
switch (op2) {
case '+': index2 = 0; break;
case '-': index2 = 1; break;
case '*': index2 = 2; break;
case '/': index2 = 3; break;
case '(': index2 = 4; break;
case ')': index2 = 5; break;
case '#': index2 = 6; break;
default: return -2; // 非法的运算符
}
return priority_table[index1][index2];
}
int main()
{
char op1, op2;
int result;
op1 = '+';
op2 = '*';
result = compare(op1, op2);
printf("%c %c %d\n", op1, op2, result); // 输出 + * -1
op1 = '(';
op2 = '+';
result = compare(op1, op2);
printf("%c %c %d\n", op1, op2, result); // 输出 -1
op1 = '#';
op2 = ')';
result = compare(op1, op2);
printf("%c %c %d\n", op1, op2, result); // 输出 -1
return 0;
}
```
在上面的示例代码中,使用一个二维数组 `priority_table` 表示算符优先关系表。数组的每个元素表示两个算符之间的优先级关系,-1 表示第一个算符优先级较低,0 表示两个算符相等,1 表示第一个算符优先级较高,-2 表示其中一个算符非法。
使用 `compare` 函数来比较两个算符的优先级关系。该函数首先将两个算符转换成对应的数组下标,然后返回二维数组中对应元素的值。
在 `main` 函数中,调用 `compare` 函数来比较三组算符的优先级关系,并输出结果。
阅读全文