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

资源简介

将含有加减乘除的算术表达式中缀形式转换成后缀形式输出

资源截图

代码片段和文件信息

#include 

using namespace std;

#define MAX 100
char stock[MAX];
int top=-1;

void fun( char a[]char b[])
{
    int ilenj;
    len=strlen(a);
    j=-1;
    for(i=0;i    {
        switch(a[i])
        {
        case ‘(‘:stock[++top]=‘(‘;break;//若a[i]为左括弧“(”则将此括弧入栈stock

        case ‘-‘://若a[i]为“+”或“-”则将当前栈stock中“(”以前的所有字符(运算符)依次删除
                 //并存入数组b中然后将a[i]入栈stock中
        case ‘+‘:while(top>=0&&stock[top]!=‘(‘)
                      b[++j]=stock[top--];
                stock[++top]=‘ ‘;
                stock[++top]=a[i];
                    break;

        case ‘*‘://若a[i]为“*”或“/”则将当前栈stock中的栈顶端连续的“*”或“/”删除
                 //并依次存入数组b中然后将a[i]入栈stock中
        case ‘/‘:while(top>=0&&stock[top]!=‘(‘&&stock[top]!=‘+‘&&stock[top]!=‘-‘)
                     b[++j]=stock[top--];
                stock[++top]=‘ ‘;
                stock[++top]=a[i];

                break;
        case‘)‘:while(stock[top]!=‘(‘)//若ch为右括弧“)”则将栈op中左括弧“(”以前的字符依次删除
                    b[++j]=stock[top--];//并存入数组b中
                top--;//然后将左括弧“(”删除
                break;
        default://若a[i]为数字将后续的所有数字均依次存入数组b中
                //并以字符“ ”标志数值串结束
                b[++j]=a[i];
                if(i==len-1)
                {
                    b[++j]=‘ ‘;
                    break;
                }
                else
                    if(a[i+1]<=‘0‘||a[i+1]>=‘9‘)
                    {
                        b[++j]=‘ ‘;
                    }
        }
    }
    while(top>=0)
        b[++j]=stock[top--];//若字符串a扫描完毕则将栈stock中的所有运算符依次删除并存入数组b中
    b[++j]=‘\0‘;
    for(i=0;i<=j;i++)//最后可得到表达式的后缀表示在数组b中
        cout<}
void compvalue(char exp[])
{
    int ilensum=0c;
    top=-1;
    int digit[MAX];
    len=strlen(exp);

    for(i=0;i    {
        switch( exp[i] )
        {
        case‘ ‘: break;
        case‘+‘: sum=digit[top]+digit[top-1];
                digit[--top]=sum;
                break;
        case‘-‘:sum=digit[top-1]-digit[top];
                digit[--top]=sum;

                break;
        case‘*‘:sum=digit[top]*digit[top-1];
                digit[--top]=sum;
                break;
        case‘/‘:sum=digit[top-1]/digit[top];
                digit[--top]=sum;
                break;
        default:
                c=0;
                while(exp[i]>=‘0‘&&exp[i]<=‘9‘)
                {
                    c=c*10+exp[i]-48;
                    i++;
                }
                digit[++top]=c;
        }
    }
    cout<}
int main()
{
    char a[MAX]b[MAX];
    cin>>a;//数组a用于存放用户输入的中缀表达式
    fun(ab);//函数调用,用于将中缀转换成后缀
    cout<<“ “;
    compvalue(b);//用于计算中缀表达式结果


    return 0;
}

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

     文件     604503  2009-05-18 22:12  c++中缀转后缀\bin\Debug\stock.exe

     文件       3047  2009-05-18 22:12  c++中缀转后缀\main.cpp

     文件     118556  2009-05-18 22:12  c++中缀转后缀\obj\Debug\main.o

     文件       1100  2009-05-17 19:39  c++中缀转后缀\stock.cbp

     文件        215  2009-05-18 22:14  c++中缀转后缀\stock.depend

     文件        241  2009-05-18 22:15  c++中缀转后缀\stock.layout

     目录          0  2009-12-08 22:15  c++中缀转后缀\bin\Debug

     目录          0  2009-12-08 22:15  c++中缀转后缀\obj\Debug

     目录          0  2009-12-08 22:15  c++中缀转后缀\bin

     目录          0  2009-12-08 22:15  c++中缀转后缀\obj

     目录          0  2009-12-08 22:15  c++中缀转后缀

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

               727662                    11


评论

共有 条评论