duizhang

#include<stdio.h>

int isop(char op)
{
    char OP[6] = {'+','-','*','/','(',')'};
    int i;
    for(i = 0;i <= 5; i++)
    {
        if(op==OP[i])
        {
            return 1;
        }
    }
    return 0;
}

int isdigi(char digi)
{
    if(digi >= '0' && digi <= '9')
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int isletter(char letter)
{
    if(letter >='a' && letter <= 'z')
    {
        return 1;
    }
    else if(letter >= 'A' && letter <= 'Z')
    {
        return 1;
    }
        return 0;
}

int pre(char op1,char op2)
{
    if (op1 == '(')
    {
        return -1;
    }
    if(op1 == '+' || op1 == '-')
    {
        if(op2 =='*' || op2 == '/')
        {
            return -1;
        }
        else
        {
            return 0;
        }
    }
    if(op1 =='*' ||op1 =='/')
    {
        if(op2 =='+'||op2 == '-')
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}

//void push()
//void pop()

int main()
{
    int i;
    int stack[101]= {0};
    int top = 0;
    char lookhead;
    lookhead = getchar();
    while(lookhead != '#')
    {

        if(isdigi(lookhead) == 1||isletter (lookhead) ==1)
        {
            putchar(lookhead);
            lookhead = getchar();
            continue;
        }

        else if(isop(lookhead) == 1)
        {

            if(top == 0)
            {
                top++;
                stack[top] = lookhead;
            }
            else 
            {
                if(lookhead == '(')
                {
                    top++;
                    stack[top] = '(';
                }
                else if(lookhead == ')')
                {
                    for(i = top;stack[i] != '(';i--)
                    {
                        putchar(stack[i]);
                        top--;
                    }
                    top --;
                }
                else if(pre(lookhead,stack[top]) == -1)
                {
                    for(i = top; pre(lookhead,stack[top]) < 1;i--)
                    {
                        putchar(stack[i]);
                        top--;
                    }
                    top ++;
                    stack[top] = lookhead;
                }
                else
                {
                    top++;
                    stack[top] = lookhead;
                }
            }
            lookhead = getchar();
            continue;
        }
        else if(lookhead ==' ')
        {
            lookhead = getchar();
            continue;
        }
        else
        {
            printf("error");
            return 0;
        }
        
    }
    if(top != 0)
    {
        for(i=top ; top > 0; i--)
        {
            if(stack[i] == '(')
            {
                printf("error");
                return 0;
            }
            putchar(stack[i]);
            top --;
        }
    }
    return 0;
}

 

posted @ 2014-03-06 17:09  hcs2024  阅读(188)  评论(0编辑  收藏  举报