做网站搜索结果的代码/武汉seo外包平台
栈计算器,题目内容就不赘述了,这里主要是讲讲我遇到的挫折折磨劫难摧残!
说到底还是我的编程习惯太差劲。
比较下面两段代码:第二段代码是我一开始写的,一直报段错误,,,在一开始写的时候,我考虑到如果符号栈内不空,那么数字栈内也一定不空,且至少有两个数字,所以while中不用判断数字栈是否为空。但是在有的平台上这个就会被视作bug,所以为了以后的笔试顺利,一定一定要有好的编程习惯,多多注意边界问题,即使你肯定它绝对不会超过边界,也要判断边界问题!!!
//第一段:
while(!sym.empty()&& num.size()>=2){x=num.top();num.pop();y=num.top();num.pop();if(sym.top()=='+') z=x+y;if(sym.top()=='-') z=y-x; if(sym.top()=='*') z=y/x; if(sym.top()=='/') z=x*y; num.push(z);
}
//第二段:
while(!sym.empty()){x=num.top();um.pop();y=num.top();num.pop();if(sym.top()=='+') z=x+y;if(sym.top()=='-') z=y-x; if(sym.top()=='*') z=y/x; if(sym.top()=='/') z=x*y; num.push(z);
}
//注意此代码不能处理这种形式:-1*(-1-1),也就是说存在负数。
#include<string>
#include<stack>
#include<vector>
#include<iostream>
using namespace std;
stack<int> num;
stack<char> sym;
vector<int> n;//专门存放数字
//vector<char> s;//专门存放符号
int main(){string s;char a;int x,y,z=0;while(cin>>s){int numb=0,flag=0;
// cout<<"s:"<<s<<"\n";for(int i=0;i<s.size();i++){//符号数组flag=0;numb=0;char a;int x,y,z=0;while(s[i]>='0'&&s[i]<='9') {flag=1;numb=numb*10+s[i]-'0';//转化为数字i++;}if(flag) num.push(numb);//数字入栈 if(s[i]=='+'){ //栈内不能有乘除号while(!sym.empty()&&(sym.top()=='*'||sym.top()=='/'||sym.top()=='-')){a=sym.top();sym.pop();x=num.top();num.pop();y=num.top();num.pop();//弹出两个操作数if(a=='*') z=x*y;else if(a=='/') z=y/x;else z=y-x;num.push(z);z=0;}sym.push(s[i]);}else if(s[i]=='-'){while(!sym.empty()&&(sym.top()=='*'||sym.top()=='/'||sym.top()=='-')){a=sym.top();sym.pop();x=num.top();num.pop();y=num.top();num.pop();//弹出两个操作数if(a=='*') z=x*y;else if(a=='/') z=y/x;else z=y-x;num.push(z);z=0;}sym.push(s[i]);}else if(s[i]=='*'||s[i]=='/'){while(!sym.empty()&&(sym.top()=='/')){a=sym.top();sym.pop();x=num.top();num.pop();y=num.top();num.pop();//弹出两个操作数z=y/x;num.push(z);}sym.push(s[i]);}else if(s[i]=='('){sym.push('(');}else if(s[i]==')'){while(!sym.empty()&&sym.top()!='('){x=num.top();num.pop();y=num.top();num.pop();if(sym.top()=='+') z=x+y;if(sym.top()=='-') z=y-x; if(sym.top()=='*') z=y*x; if(sym.top()=='/') z=y/x; sym.pop();num.push(z);} sym.pop();}}while(!sym.empty()&& num.size()>=2){x=num.top();num.pop();y=num.top();num.pop();if(sym.top()=='+') z=x+y;if(sym.top()=='-') z=y-x; if(sym.top()=='*') z=y*x; if(sym.top()=='/') z=y/x; num.push(z);sym.pop();}cout<<num.top()<<"\n";num.pop();}return 0;
}