后缀表达式求值c++

逆波兰式(后缀表达式求值),要支持负数的,感谢大家!

很急,还剩20分钟了;

在线等,一有回答我就看, 只要我测试能通过就采纳。

#include

#include
//#include

using namespace std;

int main(){

string s;

getline(cin,s);

stack<int> sta;

int left=0;

int right=0;

for(int i=0;i<s.size();i++){

    if(s[i]>='0'&&s[i]<='9'){

        string s2=" ";

        while(s[i]>='0'&&s[i]<='9'){

            s2+=s[i];

            i++;

        }

        sta.push(atoi(s2.c_str()));

    }

    else if(s[i]!=' '){

        if(!sta.empty()){

            right=sta.top();

            sta.pop();

        }

        if(!sta.empty()){

            left=sta.top();

            sta.pop();

        }

        switch(s[i]){

            case '+':

                sta.push(left+right);

                break;

            case '-':

                sta.push(left-right);

                break;

            case '*':

                sta.push(left*right);

                break;

            case '/':

                sta.push(left/right);

                break;

            default:

                break;

        }

    }

}

cout<<sta.top()<<endl;

return 0;

}

#include

#include

#include

using namespace std;

int main(){

string s;

getline(cin,s);

stack<int> sta;

int left=0;

int right=0;

for(int i=0;i<s.size();i++){

    if(s[i]>=‘0’&&s[i]<=‘9’){

        string s2=“”;

        while(s[i]>=‘0’&&s[i]<=‘9’){

            s2+=s[i];

            i++;

        }

        sta.push(stoi(s2));

    }

    else if(s[i]!=‘ ‘){

        if(!sta.empty()){

            right=sta.top();

            sta.pop();

        }

        if(!sta.empty()){

            left=sta.top();

            sta.pop();

        }

        switch(s[i]){

            case ‘+’:

                sta.push(left+right);

                break;

            case ‘-‘:

                sta.push(left-right);

                break;

            case ‘*’:

                sta.push(left*right);

                break;

            case ‘/’:

                sta.push(left/right);

                break;

            default:

                break;

        }

    }

}

cout<<sta.top()<<endl;

return 0;

}

我给个半成品
#include <stdio.h>
#include <stdlib.h>

#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10

typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;

void InitStack(sqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if( !s->base )
exit(0);

s->top = s->base;
s->stackSize = STACK_INIT_SIZE;

}

void Push(sqStack *s, ElemType e)
{
// 栈满,追加空间,鱼油必须懂!
if( s->top - s->base >= s->stackSize )
{
s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));
if( !s->base )
exit(0);

    s->top = s->base + s->stackSize;
    s->stackSize = s->stackSize + STACKINCREMENT;
}

*(s->top) = e;      // 存放数据
s->top++;

}

void Pop(sqStack *s, ElemType *e)
{
if( s->top == s->base )
return;

*e = *--(s->top);   // 将栈顶元素弹出并修改栈顶指针

}

int StackLen(sqStack s)
{
return (s.top - s.base);
}

int main()
{
sqStack s;
char c, e;

InitStack( &s );

printf("请输入中缀表达式,以#作为结束标志:");
scanf("%c", &c);

while( c != '#' )
{
    while( c>='0' && c<='9' )
    {
        printf("%c", c);
        scanf("%c", &c);
        if( c<'0' || c>'9' )
        {
            printf(" ");
        }
    }

    if( ')' == c )
    {
        Pop(&s, &e);
        while( '(' != e )
        {
            printf("%c ", e);
            Pop(&s, &e);
        }
    }
    else if( '+'==c || '-'==c )
    {
        if( !StackLen(s) )
        {
            Push(&s, c);
        }
        else
        {
            do
            {
                Pop(&s, &e);
                if( '(' == e )
                {
                    Push(&s, e);
                }
                else
                {
                    printf("%c ", e);
                }
            }while( StackLen(s) && '('!=e );
            Push(&s, c);
        }
    }
    else if( '*'==c || '/'==c || '('==c )
    {
        Push(&s, c);
    }
    else if( '#'== c )
    {
        break;
    }
    else
    {
        printf("\n出错:输入格式错误!\n");
        return -1;
    }

    scanf("%c", &c);
}

while( StackLen(s) )
{
    Pop(&s, &e);
    printf("%c ", e);
}

return 0;

}

你好