求解,为什么输入变长输出错误
  • 板块题目总版
  • 楼主kingdom7_
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/4/28 15:18
  • 上次更新2023/10/28 02:44:24
查看原帖
求解,为什么输入变长输出错误
721882
kingdom7_楼主2022/4/28 15:18
#include <iostream>
using namespace std;
#include <stack>

int Priority(char c){
    switch (c) {
        case '+':return 1;
        case '-':return 1;
        case '*':return 2;
        case '/':return 2;
    }
    return 0;
}

void test01(){
    stack<char> stc;
    string s1,s2 = "";
    cin >>s1;
    for (int i=0;i<s1.length();i++) {
        char c = s1[i];
        //数字直接入栈
        if (isdigit(c)){
            s2+=c;
            continue;
        }
        //如果是空栈,或者‘(’,或者运算度优先级大于栈顶
        if (stc.empty() || c=='(' || Priority(c)> Priority(stc.top())){
            stc.push(c);
            continue;
        }
        //是‘)’
        if (c==')'){
            while(!stc.empty() && stc.top()!='('){
                s2+=stc.top();
                stc.pop();
            }
            //将‘(’出栈
            stc.pop();
            continue;
        }
        //优先级小于栈顶
        while (Priority(c) <= Priority(stc.top()) && !stc.empty()){
            s2+=stc.top();
            stc.pop();
        }
        stc.push(c);
    }
    while (!stc.empty()){
        s2+=stc.top();
        stc.pop();
    }
    cout <<s2<<endl;
}

int main() {
    test01();
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

2022/4/28 15:18
加载中...