⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 中转后.cpp

📁 输入一个中缀表达式
💻 CPP
字号:
#include "iostream.h"
char s1[100],s2[100];
//s1存放中缀表达式,s2存放后缀表达式
class seqstack{
public:
	char stack[100];
	int top;
	void inistack(seqstack &s);
	void push(seqstack &s,char x);
	void pop(seqstack &s);
	char gettop(seqstack s);
	bool empty(seqstack s);
	int oper(char op);
	void change(seqstack &s);
};

void seqstack::inistack(seqstack &s)
{s.top=0;
}

void seqstack::push(seqstack &s,char x)
{ if(s.top==99)
     cout<<"error"<<endl;
  else 
  {  s.top++;
     s.stack[s.top]=x;
  }
}

void seqstack::pop(seqstack &s)
{ if(s.top==0) 
     cout<<"error"<<endl;
  else
	  s.top--;
}

char seqstack::gettop(seqstack s)
{ if(s.top==0)
{ cout<<"error"<<endl;
  return 0;
}
else
  return s.stack[s.top];
}

bool seqstack::empty(seqstack s)
{ if(s.top==0) return true;
  else return false;
}

int seqstack::oper(char op)
{ switch(op){
    case '+':case '-' : return 1;
    case '*':case '/' : return 2;
	case '(':return 0;
	default: return 0;
}
}

void seqstack::change(seqstack &s)
{ char y,ch;
  s.top=0;
  s.inistack(s);
  s.push(s,'@');
  int i=0,j=0;
  ch=s1[i];
  while(ch!='@')
  { if(ch==' ') ch=s1[++i];
    else if(ch=='(')  //为(时进栈
	{ s.push(s,ch);
	  ch=s1[++i];
	}
	else if(ch==')')  //为)时退栈,直到(为止
	{ y=s.gettop(s);
	  while(y!='(')
	  { s2[j++]=y;
	    s2[j++]=' ';
		s.pop(s);
		y=s.gettop(s);
	  }
	  s.pop(s);  //将(弹出栈
	  ch=s1[++i];
	}
	else if((ch=='+') ||(ch=='-') || (ch=='*') || (ch=='/'))
	{ y=s.gettop(s);  //对运算符进行优先级比较
	  if(s.oper(ch)>s.oper(y)) //优先级大的入栈
	  { s.push(s,ch);
	    ch=s1[++i];
	  }
	  else
	  { y=s.gettop(s);  //否则退出栈顶元素,并记入s2中
	    s2[j++]=y;
		s2[j++]=' ';
		s.pop(s);
	  }
	}
	else  //若为数字字符时,直接记入s2中
	{ while(((ch>='0') && (ch<='9')) || (ch=='.'))
	   { s2[j++]=ch;
	     ch=s1[++i];
	}
	  s2[j++]=' ';
	}
  }
	y=s.gettop(s);
	while(y!='@')
	{ s2[j++]=y;
	  s2[j++]=' ';
	  s.pop(s);
	  y=s.gettop(s);
	}
	s2[j]='@';
  }

void main()
{ seqstack s;
  char ch;
  int i=0;
  cout<<"请输入中缀表达式(以'@'结束)";
  cin>>ch;
  while(ch!='@')
  { s1[i++]=ch;
    cin>>ch;
  }
  s1[i]='@';
  cout<<"中缀表达式为:"<<endl;
  for(int j=0;j<i;j++)
	  cout<<s1[j];
  cout<<endl;
  s.change(s);
  cout<<"后缀表达式为:"<<endl;
  j=0;
  while(s2[j]!='@')
  { cout<<s2[j];
    j++;
  }
  cout<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -