P1175 表达式的转换

思路:先用栈转成中缀表达式,再用栈进行计算。要输出过程,因此计算一次输出一次,但是栈没有迭代器,不好用,换成vector(可以pop_back)。虽然表达式求值也可以这么做,但是还是直接做比较简单。

#include<bits/stdc++.h>
using namespace std;
unordered_map<char,int>mp;
int calc(int a,int b,char opt) {
if(opt=='+')return a+b;
if(opt=='-')return a-b;
if(opt=='*')return a*b;
if(opt=='/')return a/b;
if(opt=='^')return pow(a,b);
}
string s;
bool isd(char c){return (c>='0'&&c<='9');}
string change(string s)
{
stack<char>st;
string res="";
int len=s.length();
for(int i=0;i<len;++i)
{
if(isd(s[i]))res+=s[i];
else if(s[i]=='(')st.push(s[i]);
else if(s[i]==')')
{
while(!st.empty()&&st.top()!='(')
res+=st.top(),st.pop();
st.pop();
}
else
{
while(!st.empty()&&mp[st.top()]>=mp[s[i]])
res+=st.top(),st.pop();
st.push(s[i]);
}
}
while(!st.empty())res+=st.top(),st.pop();
return res;
}
void print(string s)
{
int len=s.length();
for(int i=0;i<len;++i)
printf("%c ",s[i]);
puts("");
}
void solve(string s)
{
print(s);
vector<int>v;
int len=s.length();
for(int i=0;i<len;++i)
{
if(isd(s[i]))v.push_back(s[i]-'0');
else
{
int x=v.back();v.pop_back();
int y=v.back();v.pop_back();
v.push_back(calc(y,x,s[i]));
for(int j=0;j<v.size();++j)printf("%d ",v[j]);
for(int j=i+1;j<len;++j)printf("%c ",s[j]);
puts("");
}
}
}
int main()
{
mp['(']=mp[')']=0;mp['+']=mp['-']=1;mp['*']=mp['/']=2;mp['^']=3;
cin>>s;
s=change(s);
solve(s);
return 0;
}

最新文章

  1. 开发一个简单实用的android紧急求助软件
  2. [美]莫提默 J. 艾德勒《如何阅读一本书》
  3. 关于oracle误删数据的恢复
  4. Linux 终端中常用的快捷键
  5. python+flask+mongodb+whoosh实现自己的搜索引擎(一):目录
  6. oracle查询和断开用户session
  7. MVC不错的学习资料
  8. JavaSE学习总结第08天_面向对象3
  9. c中使用malloc动态申请二维数组
  10. Apache优化
  11. 《Java从入门到放弃》入门篇:hibernate中的多表对应关系
  12. 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL
  13. JavaScript中的typeof
  14. Maven - 本地仓库(.m2) vs. 远程仓库(联网)
  15. 【Linux】linux中文本操作利器grep,awk,sed
  16. shell编程 之 传递参数到脚本里
  17. z-index使用及一定要加backgroun
  18. 61.纯 CSS 创作一只咖啡壶(这个不好看)
  19. mac系统 Xcode打包ionic项目(iOS)
  20. 剑指offer:数值的整数次方

热门文章

  1. firewalld学习--service的使用和配置
  2. kali linux终端快捷键设置
  3. ActiveMQ的安装与配置详情
  4. getchar、scanf以及缓冲区的概念
  5. Q 格式使用总结
  6. 20170430深圳Meetup
  7. Gauss列主消元
  8. BeanUtils使用将一个对象拷贝到另外一个对象
  9. 如何为 .NET Core 安装本地化的 IntelliSense 文件
  10. c# 多张图片合成一张图片