#include<iostream>
#include<stack>
#include<string>
using namespace std;
bool ds(char a,char b){
if(a=='*' && b=='+' || a=='*' && b=='-' || a=='/' && a=='+' || a=='/' && a=='-') return true;
else return false;
}
string kd(string z){
int m =0;
string z1 = z;
stack<char> s;
for(int i=0;i<=z.length()-1;i++){
if(z[i]>='0' && z[i]<='9'){
z1[m] = z[i];m++;
}
else if(z[i]=='('){
s.push('(');
}
else if(z[i]==')'){
while(s.top()!='('){
z1[m] = s.top();m++;
s.pop();
}
s.pop();
}
else if(z[i]=='+' || z[i]=='/' || z[i]=='*' || z[i]=='-'){
if(s.empty()==true || s.top()=='('){
s.push(z[i]);
}
else if( ds(z[i],s.top())==true){
s.push(z[i]);
}
else if(ds(z[i],s.top())==false){
while(s.size()!=0 || s.top()!='(' || ds(z[i],s.top())==false){
z1[m] = s.top();m++;
s.pop();
}
s.push(z[i]);
}
}
}
while(s.size()!=0){
z1[m] = s.top();m++;
s.pop();
}
return z1;
}
int shu(char c){
switch(c){
case '0':return 0;break;
case '1':return 1;break;
case '2':return 2;break;
case '3':return 3;break;
case '4':return 4;break;
case '5':return 5;break;
case '6':return 6;break;
case '7':return 7;break;
case '8':return 8;break;
case '9':return 9;break;
}
}
int main(){
int c,b,a;
string f,z;
getline(cin,f,'=');
z = kd(f);
stack<char> hz;
for(int i=0;i<=z.length()-1;i++){
if(z[i]>='0' && z[i]<='9'){
hz.push(z[i]);
}
else if(z[i]=='-' || z[i]=='+' || z[i]=='*' || z[i]=='/'){
c=shu(hz.top());
hz.pop();
b=shu(hz.top());
hz.pop();
switch(z[i]){
case '-':a=b-c;break;
case '+':a=b+c;break;
case '/':a=b/c;break;
case '*':a=b*c;break;
}
hz.push((char)(a+48));
}
}
cout<<a;
return 0;
}
共 9 条回复
……
shu函数可以用-48代替,并且我还没有学过vect0r
%%%
哦,谢谢巨佬
chen_zhe沙雕 可以用
@pikahuan 中缀转后缀能用vector吗?
shu函数不可以用-48代替吗
vector不香吗
写的不错。