• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: C/C++
  • 标签: 数据结构  

资源简介

一个简单的后缀表达式求解问题

资源截图

代码片段和文件信息

/*************************************************************************
> File Name: expression.cpp
> Author: 
> Mail: 
> Created Time: Mon 05 Jun 2017 09:59:48 PM EDT
 ************************************************************************/

#include
#include 
#include 
#include 
using namespace std;

int Level( string sOper )
{
    char sDta = sOper[0];
    switch ( sDta )
    {
        case ‘+‘:
        case ‘-‘:
        return 0;

        case ‘*‘:
        case ‘/‘:
        return 1;

        case ‘(‘:
        return -1;

        case ‘)‘:
        return 9;

        default:
        return -100;
    }
}

bool IsOperator( char cDta )
{
    switch (cDta)
    {
        case ‘(‘:
        case ‘)‘:
        case ‘+‘:
        case ‘-‘:
        case ‘*‘:
        case ‘/‘:
        return true;
        
        default:
        return false;
    }
}

void AddStackTopDta( vector& vcDta const stack& stackDta )
{
    string sDta = stackDta.top();
    if( sDta != “)“ && sDta != “(“ )
    {
        vcDta.push_back( sDta );
    }
}
vector Getexpression( string sExp )
{
    stack stackOper;
    vector vcDta;

    int iPos = 0;
    bool bPop = false;
    for( int i = 0; i < sExp.length(); ++i )
    {
       if( IsOperator( sExp[i] ) )
        {
            if( i > iPos  )
            {
                if( i > iPos )
                {
                    string sCur = sExp.substr( iPos i - iPos );
                    vcDta.push_back( sCur );
                }
                if( bPop  )
                {
                    if( !stackOper.empty() )
                    {
                        AddStackTopDta(vcDta stackOper);
                        stackOper.pop();
                        if( !stackOper.empty() )
                        {
                            AddStackTopDta(vcDta stackOper);
                            stackOper.pop();
                        }

                        bPop = false;
                    }
                }
            }

            iPos = i + 1;
            string sCurOper = sExp.substr(i 1);
            if( sCurOper == “)“ )
            {
                while( !stackOper.empty() )
                {
                    string sTop = st

评论

共有 条评论