数据结构PTA - 表达式转换

PTA - 表达式转换(更新版) 中转后

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char he[100];
    int top = -1;
    int pr[100];
    pr['+'] = 1; pr['-'] = 1;
    pr['*'] = 2; pr['/'] = 2;
    pr['('] = 3; pr[')'] = 3;
    // he栈存储运算符,pr表示运算符的优先级
    char str[20];
    scanf("%s", str);
    int len = strlen(str);
    int flag = 0;
    // flag标记第一个数字,若是第一个数字,则输出前不加空格
    for (int i = 0; i < len; i++) {
        if (((!i || str[i - 1] == '(') && (str[i] == '+' || str[i] == '-'))
            || (str[i] >= '0' && str[i] <= '9')
            || str[i] == '.') {
            // 考虑负数,正数和小数
            if (flag) printf(" ");
            if (str[i] != '+') printf("%c", str[i]);
            while (str[i + 1] == '.' || (str[i + 1] >= '0' && str[i + 1] <= '9')) {
                i++; printf("%c", str[i]);
            }
            flag = 1; // 第一个数字输出后立刻标记
        }
        else {
            if (str[i] == ')') {
                while (top != -1 && he[top] != '(') {
                    printf(" %c", he[top--]);
                }
                top--;
                // 弹出'(',括号不输出
            }
            else if (top == -1 || (pr[str[i]] > pr[he[top]])) {
                he[++top] = str[i];
            }
            // 运算符优先级高的先输出,所以入栈
            else {
                while (top != -1 && he[top] != '('){
                    printf(" %c", he[top--]);
                }
                // 运算符小于等于栈顶元素,就输出
                he[++top] = str[i];
            }
        }
    }
    while (top != -1) {
        printf(" %c", he[top--]);
    }
    // 将栈内的元素全部输出
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值