#include <iostream>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;
int precede(const char a)
{
switch(a)
{
case'+':
case'-':
return 0;
case'*':
case'/':
return 1;
default:
return 2;
}
};
double compute(char a, double b, double c)
{
switch (a){
case'+': return b+c;
case'-': return b-c;
case'*': return b*c;
case'/': return b/c;
default:
return -1;
}
};
void tian(const char*a)
{
stack<char> s1;
stack<double> s2;//s1为运算数栈,s2为操作符栈
while(*a!='\0')
{
if((*a)>='0'&&(*a)<='9')
{
int x = *a-'0';
s2.push(x);
++a;
continue;
}
else{
if(s1.empty())
{
s1.push(*a);
a++;
continue;
}
if(')'==*a)
{
while(s1.top()!='(')
{
double x = s2.top();
s2.pop();
double y = s2.top();
s2.pop();
s2.push(compute(s1.top(),y,x));
s1.pop();
}
s1.pop();
a++;
continue;
}
if(precede(s1.top())<precede(*a))
{
s1.push(*a);
a++;
continue;
}
else if(s1.top()!='('){
double x = s2.top();
s2.pop();
double y = s2.top();
s2.pop();
s2.push(compute(s1.top(),y,x));
s1.pop();
if(!s1.empty()&&(precede(s1.top())>precede(*a)))
{
s1.push(*a);
a++;
}
else if(!s1.empty()){
double x = s2.top();
s2.pop();
double y = s2.top();
s2.pop();
s2.push(compute(s1.top(),y,x));
s1.pop();
s1.push(*a);
a++;
}
continue;
}
else{
s1.push(*a);
a++;
}
}
}
while(!s1.empty())
{
int x = s2.top();
s2.pop();
int y = s2.top();
s2.pop();
s2.push(compute(s1.top(),y,x));
s1.pop();
}
while(!s2.empty())
{
cout<<s2.top()<<" ";
s2.pop();
}
while(!s1.empty())
{
cout<<s1.top()<<" ";
s1.pop();
}
};
int main()
{
cout<<"tian"<<endl;
cout<<"hong"<<endl;
stack<int>a;
a.push(1);
a.push(2);
string s;
cin>>s;
tian(s.c_str());
return 0;
}
#include <stack>
#include <string>
#include <algorithm>
using namespace std;
int precede(const char a)
{
switch(a)
{
case'+':
case'-':
return 0;
case'*':
case'/':
return 1;
default:
return 2;
}
};
double compute(char a, double b, double c)
{
switch (a){
case'+': return b+c;
case'-': return b-c;
case'*': return b*c;
case'/': return b/c;
default:
return -1;
}
};
void tian(const char*a)
{
stack<char> s1;
stack<double> s2;//s1为运算数栈,s2为操作符栈
while(*a!='\0')
{
if((*a)>='0'&&(*a)<='9')
{
int x = *a-'0';
s2.push(x);
++a;
continue;
}
else{
if(s1.empty())
{
s1.push(*a);
a++;
continue;
}
if(')'==*a)
{
while(s1.top()!='(')
{
double x = s2.top();
s2.pop();
double y = s2.top();
s2.pop();
s2.push(compute(s1.top(),y,x));
s1.pop();
}
s1.pop();
a++;
continue;
}
if(precede(s1.top())<precede(*a))
{
s1.push(*a);
a++;
continue;
}
else if(s1.top()!='('){
double x = s2.top();
s2.pop();
double y = s2.top();
s2.pop();
s2.push(compute(s1.top(),y,x));
s1.pop();
if(!s1.empty()&&(precede(s1.top())>precede(*a)))
{
s1.push(*a);
a++;
}
else if(!s1.empty()){
double x = s2.top();
s2.pop();
double y = s2.top();
s2.pop();
s2.push(compute(s1.top(),y,x));
s1.pop();
s1.push(*a);
a++;
}
continue;
}
else{
s1.push(*a);
a++;
}
}
}
while(!s1.empty())
{
int x = s2.top();
s2.pop();
int y = s2.top();
s2.pop();
s2.push(compute(s1.top(),y,x));
s1.pop();
}
while(!s2.empty())
{
cout<<s2.top()<<" ";
s2.pop();
}
while(!s1.empty())
{
cout<<s1.top()<<" ";
s1.pop();
}
};
int main()
{
cout<<"tian"<<endl;
cout<<"hong"<<endl;
stack<int>a;
a.push(1);
a.push(2);
string s;
cin>>s;
tian(s.c_str());
return 0;
}