例如,计算9+(3-1)*3+8/2
思路:通过栈来实现上述元素,我们一般称上述表达式为中缀表达式,我们首先要将其转换为后缀表达式,因为中缀表达式不利于计算机运算。
上代码:
算法思路:
对字符串中的内容,遇到数字就输出,遇到符号则与栈顶元素比较优先级,若低,则将栈顶元素弹栈,若高,则压栈。若为右括号,则连续输出,直到遇到左括号,这输出的就是后缀表达式
其中isp()和icp()这两个函数是对于优先级的规定,在下一段代码中有它们的定义
void postfix(){
stack<char> s;
char y;
// s.makeEmpty();
s.push('#');
char ch[20]="9+(3-1)*3+8/2";
for(int i=0;i<13;i++){
if(isdigit(ch[i]))
cout<<ch[i];
else if(ch[i]==')'){
// cout<<ch[i]<<endl;
while(!(s.empty())&&(y=s.top())!='('){
cout<<y;
s.pop();
}
if(!s.empty())
s.pop();
}
else{
while(!s.empty()&&isp(y=s.top())>icp(ch[i])){
cout<<y;
s.pop();
}
s.push(ch[i]);
}
}
while(!s.empt