奇葩的题目的奇葩题解-colopl2018_final_b

题目重述:

其实就是一个奇葩的前缀表达式(类似),让你转换为正常入可以康懂的格式(中缀表达式),但是这个式子和前缀表达式的区别如下:

  1. 有新符号就更新,直到出了这个括号(遇到')'了),就把最新的踢出去
  2. 遇到逗号改为最新符号
  3. 数字的前导零照常输出

我们可以康到,由于规则三和规则二都提醒我们可以原封不动的用字符串处理,由于规则一中找到新的就要踢出去的原则,sui我们应该用一个栈来记录符号

代码的情况无非四种:

  1. 数字和左括号,这些就可以直接输出
  2. 逗号,就用st.top()直接输出即可
  3. 运算符号,直接添加到栈里
  4. 否则(a也就是右括号)就zhi——接将最新的符号去掉(st.pop())然后照常输出右括号即可

终于到了大家期待的damn码展示环节(注释有点鬼畜,还有个人压行症晚期请见谅qwq):

#include<bits/stdc++.h>
using namespace std;
stack<char> st;
int main()
{
    string s;
    cin>>s;//输入,这里没空格,不需要用getline
    for(auto i:s)//大人,时代变了(bushi),C++11的新特性,比又臭又长的C++98遍历好了太多
    {
        if(i=='('||i<='9'&&i>='0')cout<<i;//数字跳过,注意是&&不是||否则就成复读坤了qwq
        else if(i==',')cout<<st.top();//现在的最后一个符号进行输出
        else if(i=='+'||i=='-'||i=='*'||i=='/')st.push(i);//更新符号
        else
        {
            st.pop();//哈哈,你的那套已经补管用了,还是用之前的ba
            cout<<")";
        }
    }
    return 0;
}

完结撒花🥳🥳🥳

posted @ 2025-08-25 13:53  CCCsuper  阅读(10)  评论(3)    收藏  举报
萌ICP备20256293号