集美大学数据结构吧 关注:73贴子:269
  • 2回复贴,共1

为什么我用第二个main函数不可以实现中缀表达式转换成后缀表达式

只看楼主收藏回复

#include<iostream>
#include<stack>
#include<string>
#include<cctype>
using namespace std;
int precede(char optrA, char optrB)
{if(optrA=='*'||optrA=='/')
if(optrB=='*'||optrB=='/')
return -1;
if(optrB=='(')
return 1;
if (optrA=='(')
return -1;
if(optrA=='*'||optrA=='/')
return 1;
if(optrA=='+'||optrA=='-')
if(optrB=='+'||optrB=='-')
return -1;
else
if(optrB=='*'||optrB=='/')
return -1;
}
bool isOptr( char c)
{
if(c=='+'||c=='-'||c=='*'||c=='/')
return true;
return false;
}
void trans(string expr)
{
stack<char>s;
for(int i=0;i<expr.length();i++)
{
char c=expr[i];
if(isdigit(c))
cout<<c-'0';
else
{
if(s.empty()||c=='(')
s.push(c);
else
{
if(c==')')
{ while(s.top()!='(')
{cout<<s.top();s.pop();}
s.pop();}
else
switch(precede(c,s.top()))
{case 1:s.push(c);break;
case -1:
{
if(c=='(')
s.push(c);
else
{while(!s.empty())
{
cout<<s.top(); s.pop();
}
s.push(c);
}
}
}
}
}
}
while(!s.empty())
{cout<<s.top();s.pop();}
}
int main()
{
string s="9+(3-1)*3+10/2";
trans(s);
}
int main()
{
string a;
cin>>a;
trans(a);
}


1楼2015-10-19 17:28回复
    第一个可以吗?


    IP属地:福建来自Android客户端2楼2015-10-19 17:31
    回复
      改成string a="";试试


      IP属地:福建来自Android客户端3楼2015-10-19 17:32
      回复