本题要求实现整数的混合四则运算,运算符仅有四种:+、-、* 、/ ,但是以字符串的形式输入表达式。注意这里的除数均为可整除的数。 提示:将+、-、* 、/、=做成二维数组的优先级比对: char oplist[5][5]; //'+' '-' '\*' '/ ''=' ={{'<','<','>','>','<'},//'+' {'<','<','>','>','<'},//'-' {'<','<','<','<','<'},//'\*' {'<','<','<','<','<'},//'/ ' {'>','>','>','>','='}};//'-' 符号与符号之间的判断就三种情况,>型、<型、=型。 比如对栈顶元素+来说,它遇到新符号是乘号除号的都约定为>情况,新符号直接进栈。如果遇到新符号是加号减号等号的都约定为<情况,需要出栈并进行计算。 加减乘除两两之间优先等级,只有<和>情况。比较结果是等号的,什么时候出现呢?只有=遇到=的情况,可预先在符号栈里面先存一个=。 另外用到 iop(char ch)//返回符号对应的下标,比如oplist[iop(ch)][iop(s[i])]就是得到对应的优先级比较结果。
时间: 2023-12-24 07:02:00 浏览: 112
零基础小白Python入门必看——编程基础概念.docx
好的,根据你提供的提示,我们可以使用一个二维数组来实现符号之间的优先级比对。这个二维数组可以命名为oplist,其大小为5x5。
```c
char oplist[5][5] = {
{'<', '<', '>', '>', '<'}, // '+'
{'<', '<', '>', '>', '<'}, // '-'
{'<', '<', '<', '<', '<'}, // '*'
{'<', '<', '<', '<', '<'}, // '/'
{'>', '>', '>', '>', '='} // '='
};
```
上述二维数组中,行表示栈顶元素的符号,列表示当前运算符的符号。数组元素的值表示当前运算符相对于栈顶元素符号的优先级比对结果。其中,'<'表示当前运算符优先级低于栈顶元素符号,'>'表示当前运算符优先级高于栈顶元素符号,'='表示当前运算符与栈顶元素符号优先级相同。
为了实现符号对应的下标,你可以定义一个函数iop(char ch),该函数接受一个字符作为参数,并返回该字符在oplist中的下标。具体实现如下:
```c
int iop(char ch) {
if (ch == '+')
return 0;
else if (ch == '-')
return 1;
else if (ch == '*')
return 2;
else if (ch == '/')
return 3;
else if (ch == '=')
return 4;
else
return -1; // 返回-1表示未知符号
}
```
在实际使用时,你可以通过oplist[iop(ch1)][iop(ch2)]来获取符号ch1与ch2之间的优先级比对结果。
希望以上解答能够满足你的需求!如果还有其他问题,请随时提问。
阅读全文