首先定义两栈结构体
/*数据栈*/
struct numStack //struct结构体构建栈
{
int data[100];
int top;
};
/*符号栈*/
struct optStack
{
char opts[100];
int top;
};
还有一个专门计算加减乘除的函数
/*四则运算*/
int calcu(int v1, int v2, char c)
{
int sum;
switch(c) {
case '+' : {
sum = v1 + v2;
break;
}
case '-' : {
sum = v1 - v2;
break;
}
case '*' : {
sum = v1 * v2;
break;
}
case '/' : {
sum = v1 / v2;
break;
}
}
return sum;
}
接下来是主体函数,处理输入和优先级等
void Test()
{
struct numStack data;
data.top = -1;
struct optStack symbol;
symbol.top = -1;
int i = 0, t = 0, sum = 0, num1, num2;
char c;
char v[100] = {0};
char *str = (char *)malloc(sizeof(char)*100);
while((c = getchar()) != '\n')
{
str[i] = c;
i ++;
}
str[i] = '\0';
for(i = 0; str[i] != '\0'; i ++) {
if(i == 0 && str[i] == '-') {
v[t++] = str[i];
}
else if(str[i] == '(' && str[i+1] == '-') {
i ++;
v[t++] = str[i++];
while(str[i] >= '0' && str[i] <= '9') {