更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

C++中缀表达式转后缀表达式的方法

  • 发布:C++培训
  • 来源:C++资讯
  • 时间:2020-05-27 16:47

本文实例为大家分享了C++中缀表达式转后缀表达式的具体代码,具体如下:

1、初始化两个栈:运算符栈s1和储存中间结果的栈s2;

2、从左至右扫描中缀表达式;

3、遇到操作数时,将其压s2;

4、遇到运算符时,比较其与s1栈顶运算符的优先级:

1)、如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;

2)、否则,若优先级比栈顶运算符的高,也将运算符压入s1

3)、否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4-1)与s1中新的栈顶运算符相比较;

5、遇到括号时:

1)、如果是左括号“(”,则直接压入s1;

2)、如果是右括号“)”,则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将这一对括号丢弃;

6、重复步骤2至5,直到表达式的最右边;

7、将s1中剩余的运算符依次弹出并压入s2;

8、依次弹出s2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式

代码:

#include<iostream>

#include<cstring>

#include<algorithm>

#include<stack>

using namespace std;

stack<char> s1; //运算符栈

stack<char> s2; //中间结果栈

int f(const char str){

int yxj; //优先级

switch(str){

case '*':yxj=5;break;

case '/':yxj=5;break;

case '+':yxj=4;break;

case '-':yxj=4;break;

}

return yxj;

}

int main(){

char c[100]="(12+4-13)+6*2";

//char c[100]="1+((2+3)*4)-5";

int lenc=strlen(c);

//读取字符串

for(int i=0;i<lenc;i++){

if(c[i]>='0'&&c[i]<='9'){ //如果是数字,直接压入s2

s2.push(c[i]);

}else if(c[i]=='+'||c[i]=='-'||c[i]=='*'||c[i]=='/'){ //如果是运算符

while(true){

if(s1.empty()||s1.top()=='('){ //s1为空 ,或者栈顶为(

s1.push(c[i]);

break;

}else if(f(c[i])>f(s1.top())){ //当前运算符优先级大于s1栈顶运算符优先级

s1.push(c[i]);

break;

}

else{ //小于等于

char cc=s1.top();

s1.pop();

s2.push(cc);

}

}

}else{

if(c[i]=='('){ //直接读入

s1.push(c[i]);

}else{

while(s1.top()!='('){

char ccc=s1.top();

s1.pop();

s2.push(ccc);

}

s1.pop();

}

}

}

while(!s1.empty()){

char cccc=s1.top();

s2.push(cccc);

s1.pop();

}

//while(!s2.empty()){ //结果是逆序的

// cout<<s2.top();

// s2.pop();

//}

while(!s2.empty()){

char c=s2.top();

s1.push(c);

s2.pop();

}

while(!s1.empty()){

cout<<s1.top();

s1.pop();

}

return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家有什么疑虑,还请关注达内c++培训。

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:详解C++ 知识点类,入行必看!
下一篇:C语言新手常犯的错误你遇到了吗?

C语言宏定义的几种使用方法

C与C++内存管理避坑指南

C/C++代码规范注释有哪些讲究?

C语言中,全局变量滥用的后果竟如此严重?

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省