• 大小: 199KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: C/C++
  • 标签:

资源简介

使用栈将中缀表达式转化为后缀表达式然后求值 语言C++

资源截图

代码片段和文件信息

#include 
#include 
#include 
//*******************************************************************************************************
class Stack{ //栈类定义
private:
double A[300];

public:
void InitStack() //初始化
{ A[0] = 0;}
void Push(double key)   //入栈
{
if(A[0]<= 300 - 1)
{
int i = (int)++A[0];
A[i] = key;
}
else
printf(“栈已满!!\n“);
}
double Pop() //出栈
{
if(A[0] != 0)
{
int i = (int)A[0];
A[0]--;
return A[i];
}

printf(“栈已空!!\n“);
return -1;
}
bool IsOneLeft()
{
if((int)A[0] == 1)
return 1;

return 0;
}
};

//**********************************************************************************************************************
char* SExp(char s[]) //求后缀表达式
{
int iabc=0;
char A[300]B[300];

i = 0;
a = 0;
while(s[i] != ‘\0‘) //首次遍历,检查是否有输入错误以及整理表达式
{
if(s[i] <= ‘9‘ && s[i] >=‘0‘) A[a++] = s[i]; //数字
else if(s[i] == ‘-‘) //减法
{
if(i==0||s[i-1]==‘(‘)
{
A[a++] = ‘~‘;
}
else if(s[i+1]!=‘+‘&&s[i+1]!=‘^‘&&s[i+1]!=‘/‘&&s[i+1]!=‘*‘&&s[i+1]!=‘-‘&&s[i+1]!=‘)‘)
A[a++] = s[i];
else c=1;
}
else if(s[i] == ‘+‘) //加法
{
if(i==0||s[i-1]==‘(‘)
{}
else if(s[i+1]!=‘+‘&&s[i+1]!=‘^‘&&s[i+1]!=‘/‘&&s[i+1]!=‘*‘&&s[i+1]!=‘-‘&&s[i+1]!=‘)‘)
A[a++] = s[i];
else c=1;
}
else if(s[i]==‘*‘) //乘法
{
if(s[i+1]!=‘+‘&&s[i+1]!=‘^‘&&s[i+1]!=‘/‘&&s[i+1]!=‘*‘&&s[i+1]!=‘-‘&&s[i-1]!=‘(‘&&s[i+1]!=‘)‘&&i!=0) A[a++] = s[i];
else c=1;
}
else if(s[i]==‘/‘) //除法
{
if(s[i+1]!=‘+‘&&s[i+1]!=‘^‘&&s[i+1]!=‘/‘&&s[i+1]!=‘*‘&&s[i+1]!=‘-‘&&s[i-1]!=‘(‘&&s[i+1]!=‘)‘&&i!=0) A[a++] = s[i];
else c=1;
}
else if(s[i]==‘^‘) //指数运算
{
if(s[i+1]!=‘+‘&&s[i+1]!=‘^‘&&s[i+1]!=‘/‘&&s[i+1]!=‘*‘&&s[i+1]!=‘-‘&&s[i-1]!=‘(‘&&s[i+1]!=‘)‘&&i!=0) A[a++] = s[i];
else c=1;
}
else if(s[i]==‘)‘&&s[i-1]!=‘+‘&&s[i-1]!=‘^‘&&s[i-1]!=‘/‘&&s[i-1]!=‘*‘&&s[i-1]!=‘-‘&&s[i+1]!=‘(‘&&s[i-1]!=‘(‘&&i!=0) A[a++] = s[i]; //后括号处理
else if(s[i]==‘(‘&&s[i+1]!=‘^‘&&s[i+1]!=‘/‘&&s[i+1]!=‘*‘&&s[i+1]!=‘)‘&&s[i-1]!=‘)‘) A[a++] = s[i]; //前括号处理
else
c=1;
i++;
if(c) //箭头报错设置
{
putchar(24);
printf(“\n箭头处表达式有误!\n“);
return NULL;
}
putchar(‘ ‘);
}
A[a]=‘\0‘;
strcpy(sA);
//printf(“\n%s“s);

i=0;
a=0;
b=0;
while(s[i] != ‘\0‘) //求后缀表达式
{
if(s[i] <= ‘9‘ && s[i] >=‘0‘||s[i]==‘~‘)
{
A[a++]=s[i++];
while(s[i] <= ‘9‘ && s[i] >=‘0‘&&s[i] != ‘\0‘)
{
A[a++]=s[i++];
}
A[a++]=‘ ‘;
continue;
}
else if(s[i]==‘+‘)
{
if(b==0||B[b-1]==‘(‘) B[b++]=‘+‘;
else
{
A[a++]=B[--b];
A[a++]=‘ ‘;
B[b++]=‘+‘;
}
}
else if(s[i]==‘-‘)
{
if(b==0||B[b-1]==‘(‘) B[b++]=‘-‘;
else
{
A[a++]=B[--b];
A[a++]=‘ ‘;
B[b++]=‘-‘;
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      33792  2010-11-12 13:17  中缀表达式求值\Debug\vc60.idb

     文件      53248  2010-11-12 13:17  中缀表达式求值\Debug\vc60.pdb

     文件     217144  2010-11-12 13:17  中缀表达式求值\Debug\zxbdsqz.exe

     文件     228520  2010-11-12 13:17  中缀表达式求值\Debug\zxbdsqz.ilk

     文件      13226  2010-11-12 13:17  中缀表达式求值\Debug\zxbdsqz.obj

     文件     217588  2010-11-11 18:29  中缀表达式求值\Debug\zxbdsqz.pch

     文件     484352  2010-11-12 13:17  中缀表达式求值\Debug\zxbdsqz.pdb

     文件       5257  2010-11-12 13:17  中缀表达式求值\zxbdsqz.cpp

     文件       3413  2010-11-11 18:27  中缀表达式求值\zxbdsqz.dsp

     文件        522  2010-11-11 18:29  中缀表达式求值\zxbdsqz.dsw

     文件      41984  2010-11-12 13:23  中缀表达式求值\zxbdsqz.ncb

     文件      48640  2010-11-12 13:23  中缀表达式求值\zxbdsqz.opt

     文件       1433  2010-11-12 13:17  中缀表达式求值\zxbdsqz.plg

     目录          0  2010-11-12 13:17  中缀表达式求值\Debug

     目录          0  2010-11-12 13:23  中缀表达式求值

----------- ---------  ---------- -----  ----

              1349119                    15


评论

共有 条评论