今日数据结构课讲到栈,突然提到这道陈年老题用栈去实现,遂脑洞凿开自己写了一遍.
顺便用了vector模拟栈,是平时没怎么用过的类型所以改了老半天的bug还做了半天的笔记.
然后看了一眼原题是有括号的,寄!
#includeusing namespace std; typedef vector vc; typedef vector vi; vc num;//存放数字,即用即清 vc s;//存放运算符 vi n;//存放所有的数字 string str;//存放输入 void push_num()//把数转换格式后压栈 { if(num.empty()) return; int a=0; for(int j=0;!num.empty();j++) { a+=pow(10,j)*(num.back()-'0'); num.pop_back(); } n.push_back(a); num.clear(); } void chengchu()//乘除 { if(s.back()=='*') { n[n.size()-2]=n[n.size()-2]*n[n.size()-1]; n.pop_back(); } else { n[n.size()-2]=n[n.size()-2]/n[n.size()-1]; n.pop_back(); } s.pop_back(); } int main() { cin>>str; for(int i=0;i ='0'&&str[i]<='9')//是数字 num.push_back(str[i]);//压栈 else { //首先处理数字 push_num(); if(!s.empty())//进行操作前一定要判断非空!! if(s.back()=='*'||s.back()=='/')//优先处理乘除 chengchu(); s.push_back(str[i]); } } //处理最后的数字和乘除 push_num(); if(!s.empty())//判断非空!! if(s.back()=='*'||s.back()=='/')//处理可能剩余的乘除 chengchu(); if(!s.empty())//还是要判断非空!! for(int i=0;i



