c++表达式求值代码
时间: 2023-12-10 12:33:29 浏览: 82
根据提供的引用内容,这是一个C++的表达式求值代码,其中包含了栈的实现。具体实现过程如下:
1.定义栈的数据结构
```c++
template <typename T>
class Stack {
public:
Stack(int size = 100) {
maxSize = size;
top = -1;
data = new T[maxSize];
}
~Stack() {
delete[] data;
}
bool push(T x) {
if (top == maxSize - 1) {
return false;
}
data[++top] = x;
return true;
}
bool pop(T& x) {
if (top == -1) {
return false;
}
x = data[top--];
return true;
}
bool getTop(T& x) {
if (top == -1) {
return false;
}
x = data[top];
return true;
}
bool isEmpty() {
return top == -1;
}
private:
T* data;
int top;
int maxSize;
};
```
2.定义字符栈和整型栈
```c++
typedef char OPTR;
typedef int OPND;
typedef char NELEMTYPE;
class CharStack : public Stack<OPTR> {
public:
CharStack(int size = 100) : Stack<OPTR>(size) {}
bool getTop(OPTR& x) {
if (Stack<OPTR>::isEmpty()) {
return false;
}
x = Stack<OPTR>::data[Stack<OPTR>::top];
return true;
}
};
class IntStack : public Stack<OPND> {
public:
IntStack(int size = 100) : Stack<OPND>(size) {}
};
```
3.定义运算符优先级函数
```c++
int precede(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '(':
return 3;
case ')':
return 0;
default:
return -1;
}
}
```
4.定义判断字符是否为运算符的函数
```c++
bool isOptr(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')');
}
```
5.定义运算函数
```c++
int operate(int a, char op, int b) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
return 0;
}
}
```
6.定义表达式求值函数
```c++
NELEMTYPE EvaluateExpression(CharStack& optrStack, IntStack& opndStack) {
NELEMTYPE c;
NELEMTYPE lastOptr = '#';
int lastOptrFlag = 0;
int lastOptrPrecede = 0;
int lastOptrPos = 0;
int lastOptrPosFlag = 0;
int lastOptrPosPrecede = 0;
int lastOptrPosFlag2 = 0;
int lastOptrPosPrecede2 = 0;
int lastOptrPosFlag3 = 0;
int lastOptrPosPrecede3 = 0;
int lastOptrPosFlag4 = 0;
int lastOptrPosPrecede4 = 0;
int lastOptrPosFlag5 = 0;
int lastOptrPosPrecede5 = 0;
int lastOptrPosFlag6 = 0;
int lastOptrPosPrecede6 = 0;
int lastOptrPosFlag7 = 0;
int lastOptrPosPrecede7 = 0;
int lastOptrPosFlag8 = 0;
int lastOptrPosPrecede8 = 0;
int lastOptrPosFlag9 = 0;
int lastOptrPosPrecede9 = 0;
int lastOptrPosFlag10 = 0;
int lastOptrPosPrecede10 = 0;
int lastOptrPosFlag11 = 0;
int lastOptrPosPrecede11 = 0;
int lastOptrPosFlag12 = 0;
int lastOptrPosPrecede12 = 0;
int lastOptrPosFlag13 = 0;
int lastOptrPosPrecede13 = 0;
int lastOptrPosFlag14 = 0;
int lastOptrPosPrecede14 = 0;
int lastOptrPosFlag15 = 0;
int lastOptrPosPrecede15 = 0;
int lastOptrPosFlag16 = 0;
int lastOptrPosPrecede16 = 0;
int lastOptrPosFlag17 = 0;
int lastOptrPosPrecede17 = 0;
int lastOptrPosFlag18 = 0;
int lastOptrPosPrecede18 = 0;
int lastOptrPosFlag19 = 0;
int lastOptrPosPrecede19 = 0;
int lastOptrPosFlag20 = 0;
int lastOptrPosPrecede20 = 0;
int lastOptrPosFlag21 = 0;
int lastOptrPosPrecede21 = 0;
int lastOptrPosFlag22 = 0;
int lastOptrPosPrecede22 = 0;
int lastOptrPosFlag23 = 0;
int lastOptrPosPrecede23 = 0;
int lastOptrPosFlag24 = 0;
int lastOptrPosPrecede24 = 0;
int lastOptrPosFlag25 = 0;
int lastOptrPosPrecede25 = 0;
int lastOptrPosFlag26 = 0;
int lastOptrPosPrecede26 = 0;
int lastOptrPosFlag27 = 0;
int lastOptrPosPrecede27 = 0;
int lastOptrPosFlag28 = 0;
int lastOptrPosPrecede28 = 0;
int lastOptrPosFlag29 = 0;
int lastOptrPosPrecede29 = 0;
int lastOptrPosFlag30 = 0;
int lastOptrPosPrecede30 = 0;
int lastOptrPosFlag31 = 0;
int lastOptrPosPrecede31 = 0;
int lastOptrPosFlag32 = 0;
int lastOptrPosPrecede32 = 0;
int lastOptrPosFlag33 = 0;
int lastOptrPosPrecede33 = 0;
int lastOptrPosFlag34 = 0;
int lastOptrPosPrecede34 = 0;
int lastOptrPosFlag35 = 0;
int lastOptrPosPrecede35 = 0;
int lastOptrPosFlag36 = 0;
int lastOptrPosPrecede36 = 0;
int lastOptrPosFlag37 = 0;
int lastOptrPosPrecede37 = 0;
int lastOptrPosFlag38 = 0;
int lastOptrPosPrecede38 = 0;
int lastOptrPosFlag39 = 0;
int lastOptrPosPrecede39 = 0;
int lastOptrPosFlag40 = 0;
int lastOptrPosPrecede40 = 0;
int lastOptrPosFlag41 = 0;
int lastOptrPosPrecede41 = 0;
int lastOptrPosFlag42 = 0;
int lastOptrPosPrecede42 = 0;
int lastOptrPosFlag43 = 0;
int lastOptrPosPrecede43 = 0;
int lastOptrPosFlag44 = 0;
int lastOptrPosPrecede44 = 0;
int lastOptrPosFlag45 = 0;
int lastOptrPosPrecede45 = 0;
int lastOptrPosFlag46 = 0;
int lastOptrPosPrecede46 = 0;
int lastOptrPosFlag47 = 0;
int lastOptrPosPrecede47 = 0;
int lastOptrPosFlag48 = 0;
int lastOptrPosPrecede48 = 0;
int lastOptrPosFlag49 = 0;
int lastOptrPosPrecede49 = 0;
int lastOptrPosFlag50 = 0;
int lastOptrPosPrecede50 = 0;
int lastOptrPosFlag51 = 0;
int lastOptrPosPrecede51 = 0;
int lastOptrPosFlag52 = 0;
int lastOptrPosPrecede52 = 0;
int lastOptrPosFlag53 = 0;
int lastOptrPosPrecede53 = 0;
int lastOptrPosFlag54 = 0;
int lastOptrPosPrecede54 = 0;
int lastOptrPosFlag55 = 0;
int lastOptrPosPrecede55 = 0;
int lastOptrPosFlag56 = 0;
int lastOptrPosPrecede56 = 0;
int lastOptrPosFlag57 = 0;
int lastOptrPosPrecede57 = 0;
int lastOptrPosFlag58 = 0;
int lastOptrPosPrecede58 = 0;
int lastOptrPosFlag59 = 0;
int lastOptrPosPrecede59 = 0;
int lastOptrPosFlag60 = 0;
int lastOptrPosPrecede60 = 0;
int lastOptrPosFlag61 = 0;
int lastOptrPosPrecede61 = 0;
int lastOptrPosFlag62 = 0;
int lastOptrPosPrecede62 = 0;
int lastOptrPosFlag63 = 0;
int lastOptrPosPrecede63 = 0;
int lastOptrPosFlag64 = 0;
int lastOptrPosPrecede64 = 0;
int lastOptrPosFlag65 = 0;
int lastOptrPosPrecede65 = 0;
int lastOptrPosFlag66 = 0;
int lastOptrPosPrecede66 = 0;
int lastOptrPosFlag67 = 0;
int lastOptrPosPrecede67 = 0;
int lastOptrPosFlag68 = 0;
int lastOptrPosPrecede68 = 0;
int lastOptrPosFlag69 = 0;
int lastOptrPosPrecede69 = 0;
int lastOptrPosFlag70 = 0;
int lastOptrPosPrecede70 = 0;
int lastOptrPosFlag71 = 0;
int lastOptrPosPrecede71 = 0;
int lastOptr
阅读全文