#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool Priority(char fir,char sec)//比较运算符优先级
{
if((fir=='+'||fir=='-')&&(sec=='*'||sec=='/'))
return true;
else
return false;
}
bool IsDigit(char data)//判断是否为数字
{
if(data>='0'&&data<='9')
return true;
else
return false;
}
bool IsSign(char data)//判断是否为符号
{
if(data=='('||data==')'||data=='+'||data=='-'||data=='*'||data=='/')
return true;
else
return false;
}
void Change(char str[],int n)//转化函数
{
int i;
stack<char> signStack;
for(i=0;i<n;i++)
{
if(IsDigit(str[i]))
cout<<str[i];
else if(IsSign(str[i]))//数字直接输出
{
if(str[i]=='('||signStack.empty())//如果是'('则入栈,栈外的'('优先级高于一切符号,栈空的话也入栈
signStack.push(str[i]);
else if(str[i]==')')//如果是')'则将栈中'('以前的全部出栈并输出,'('出栈但不输出
{
char signTmp;
signTmp=signStack.top();
signStack.pop();
while(signTmp!='(')
{
cout<<signTmp;
signTmp=signStack.top();
signStack.pop();
}
}
else//当前符号不是括号
{
char signTmp;
signTmp=signStack.top();
if(signTmp=='(')//栈顶若是'('则当前符号入栈,栈内的'('低于一切符号
signStack.push(str[i]);
else//比较的两个符号都不是括号
{
if(Priority(signTmp,str[i]))//当前符号优先级高,则入栈
signStack.push(str[i]);
else//当前符号优先级低,则栈顶符号出栈,并输出,i--,重新比较新栈顶元素和当前符号
{
cout<<signTmp;
signStack.pop();
i--;
}
}
}
}
}
while(!signStack.empty())//字符串扫描完毕后,将栈中元素依次输出
{
cout<<signStack.top();
signStack.pop();
}
cout<<endl;
}
int main()
{
char str[20];
int i=0;
do
{
cin>>str[i];
i++;
}
while(str[i-1]!='@');
Change(str,i-1);
return 1;
}
#include <stack>
#include <string>
using namespace std;
bool Priority(char fir,char sec)//比较运算符优先级
{
if((fir=='+'||fir=='-')&&(sec=='*'||sec=='/'))
return true;
else
return false;
}
bool IsDigit(char data)//判断是否为数字
{
if(data>='0'&&data<='9')
return true;
else
return false;
}
bool IsSign(char data)//判断是否为符号
{
if(data=='('||data==')'||data=='+'||data=='-'||data=='*'||data=='/')
return true;
else
return false;
}
void Change(char str[],int n)//转化函数
{
int i;
stack<char> signStack;
for(i=0;i<n;i++)
{
if(IsDigit(str[i]))
cout<<str[i];
else if(IsSign(str[i]))//数字直接输出
{
if(str[i]=='('||signStack.empty())//如果是'('则入栈,栈外的'('优先级高于一切符号,栈空的话也入栈
signStack.push(str[i]);
else if(str[i]==')')//如果是')'则将栈中'('以前的全部出栈并输出,'('出栈但不输出
{
char signTmp;
signTmp=signStack.top();
signStack.pop();
while(signTmp!='(')
{
cout<<signTmp;
signTmp=signStack.top();
signStack.pop();
}
}
else//当前符号不是括号
{
char signTmp;
signTmp=signStack.top();
if(signTmp=='(')//栈顶若是'('则当前符号入栈,栈内的'('低于一切符号
signStack.push(str[i]);
else//比较的两个符号都不是括号
{
if(Priority(signTmp,str[i]))//当前符号优先级高,则入栈
signStack.push(str[i]);
else//当前符号优先级低,则栈顶符号出栈,并输出,i--,重新比较新栈顶元素和当前符号
{
cout<<signTmp;
signStack.pop();
i--;
}
}
}
}
}
while(!signStack.empty())//字符串扫描完毕后,将栈中元素依次输出
{
cout<<signStack.top();
signStack.pop();
}
cout<<endl;
}
int main()
{
char str[20];
int i=0;
do
{
cin>>str[i];
i++;
}
while(str[i-1]!='@');
Change(str,i-1);
return 1;
}