//infix expression
#include<iostream>
#include<string>
using namespace std;
bool infix(const string &str,int first,int last);
int findO(const string &str,int first,int last);
int main()
{
cout<<"please enter the infix expression :";
string str;
cin>>str;
cout<<endl<<str<<endl;
int size=str.size();
bool success=infix(str,0,size-1);
if(success)
cout<<"the infix expression is right !"<<endl;
else
cout<<"the infix expression is wrong !"<<endl;
return 0;
}
int findO(const string &str,int first,int last)
{
if(first<last)
{
int mid=(first+last)/2;
int i=mid;
int j=mid;
while(i>first&&j<last)
{
if((str[i]=='*')||(str[i]=='+')||(str[i]=='-')
||(str[i]=='/'))
return i;
if((str[j]=='*')||(str[j]=='+')||(str[j]=='-')
||(str[j]=='/'))
return j;
i--;j++;
}
return -1;
}
else
return -1;
}
bool infix(const string &str,int first,int last)
{
if((first==last)&&(str[first]>='a')&&(str[first]<='z'))
return true;
else
{
int mid=findO(str,first,last);
if(mid==-1)
return false;
else
{
bool ok=infix(str,first,mid-1);
if(ok)
return infix(str,mid+1,last);
else
return false;
}
}
}