编辑代码

// 后缀表达式求值
void postfixEval()
{
    char postfixList[100] = {0};    // 使用char类型数组保存后缀表达式
    printf("请输入将要求值的后缀表达式:\n");
    scanf("%s", postfixList);
    getchar();
    int length;
    length = (int) strlen(postfixList);
    LiStack num;    // 定义栈num保存数字,并定义
    num = initStack();

    for (int i = 0; i < length; i++)
    {
        if (isdigit(postfixList[i]))
        {
            int nums = asciiToint(postfixList[i]);  // 因为在char类型中保存数字是ascii码类型,所以需要将其转义,具体函数在下方
            push(num, nums);    // 将数字压入栈中
        }
        else
        {
            int second = pop(num);
            int first = pop(num);
            push(num, domatch(first, postfixList[i], second));  // 调用domatch(定义在下方),将对应结果再次压入栈中
        }
    }
    printf("该表达式的值为%d\n", pop(num));
}

// 将ascii码转化为整形

int asciiToint(char ascii)
{
    // 因为在ascii码中,48表示0,49表示1……将ascii-'0',就是将对应数字的ascii码减去48,结果就是十进制中的数字
    int i = ascii - '0';
    return i;
}

// 算数求值
int domatch(int op1, char op, int op2)  // 将char类型的运算符进行相应的运算
{
    int first = (int)op1, second = (int)op2;
    if (op == '*')
    {
        return first * second;
    }
    else if(op == '/')
    {
        return first / second;
    }
    else if (op == '+')
    {
        return first + second;
    }
    else
    {
        return first - second;
    }
}