奇葩的题目的奇葩题解-colopl2018_final_b
题目重述:
其实就是一个奇葩的前缀表达式(类似),让你转换为正常入可以康懂的格式(中缀表达式),但是这个式子和前缀表达式的区别如下:
- 有新符号就更新,直到出了这个括号(遇到')'了),就把最新的踢出去
- 遇到逗号改为最新符号
- 数字的前导零照常输出
我们可以康到,由于规则三和规则二都提醒我们可以原封不动的用字符串处理,由于规则一中找到新的就要踢出去的原则,sui我们应该用一个栈来记录符号
代码的情况无非四种:
- 数字和左括号,这些就可以直接输出
- 逗号,就用st.top()直接输出即可
- 运算符号,直接添加到栈里
- 否则(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;
}
完结撒花🥳🥳🥳

浙公网安备 33010602011771号