• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签: 中缀  后缀  

资源简介

用dev c++写的代码,附有啰里啰嗦的注释和测试样例。太简单了不好意思要分。

资源截图

代码片段和文件信息

#include 							//中缀表达式转后缀表达式 
#include  //通过使用栈暂存运算符,实现运算符位置的调整 
#include  //tips: 中缀表达式即常见的表达式,可以用二叉树表示。对该二叉 
#include  //树进行后序遍历可以得到后缀表达式(逆波兰表达式)。 
#include 
using namespace std;

bool isOperand(char c); //判断是否为操作数(变量) 
bool isOperator(char c); //判断是否为操作符(运算符) 
bool isHigherOperator(char achar b); //判断操作符a的优先级是否高于b 
string generalToRvsPolish(string expression);//将中缀表达式转为后缀表达式 

int main()
{
while(true)
{
string expression; //变量由单个字母表示,运算符仅限+-*/()
getline(cinexpression); //中间空格不影响结果 

string rvsPolishNotation=generalToRvsPolish(expression);
cout< }
return 0;
}

bool isOperand(char c)
{
if((c>=‘a‘&&c<=‘z‘)||(c>=‘A‘&&c<=‘Z‘))
return true;
else
return false;
}

bool isOperator(char c)
{
if(c==‘+‘||c==‘-‘||c==‘*‘||c==‘/‘||c==‘(‘||c==‘)‘)
return true;
else
return false;
}

bool isHigherOperator(char achar b) //a大于b为true,a小于等于b为false 
{
if(a==‘(‘||b==‘(‘) //左括号无优先级,可视为既与+-的优先级相同,又与*/的优先级相同 
return true;
else if(b==‘*‘||b==‘/‘)
return false;
else if(a==‘*‘||a==‘/‘)
return true;
else
return false;
}

string generalToRvsPolish(string expression)
{
int len=expression.length();
char* rvsPoCharArray=new char[len]; //暂存后缀表达式的char数组 
int j=0; //rvsPoCharArray当前处理的位置下标 
stack operatorStack; //暂存操作符的栈,栈中始终保持上面的操作符的优先级高于下面的操作符,这是实现调整的关键 
for(int i=0;i {
//cout<<“cur: “<pression[i]< if(isOperand(expression[i])==true) //若为操作数直接输出到rvsPoCharArray 
{
rvsPoCharArray[j]=expression[i];
j++;
}

if(isOperator(expression[i])==true) //字符为操作符,进行必要的调整 
{
if(operatorStack.empty()==true) //栈为空的情况:操作符直接入栈(若

评论

共有 条评论