输出中缺少运算符

时间:2016-08-04 10:39:16

标签: c data-structures

我正在制作一个 C 程序,将中缀表达式转换为后缀表达式,其中显示不需要的符号而不是运算符 对于输入abc@#$^,输出类似于(a+b+c)

我特此附上代码

//to convert infix expression to postfix expression
#include <stdio.h>
#include <conio.h>
#include <string.h>

void push(char);
char pop();
int is_operator(char);
int precedence(char);
char stack[100];
int top=-1;

void main()
{
    int i=0,j=0,count;
    char infix[100],item,x;
    char postfix[100];
    clrscr();
    printf("Enter Infix String");
    gets(infix);
    count= strlen(infix);

    for(i=0;i!=count;i++){
        item=infix[i];
        if(item=='('){
            push(item);
        }
        else if((item>='A'&& item<='Z')||(item>='a' && item<='z')){
            postfix[j]=item;
            j++;
        }else if(is_operator(item)==1){
            x=pop();
            if(precedence(x)>precedence(item)){
                postfix[j]=x;
                j++;
            }
            else{
                push(item);
            }
        }else if(item==')'){
            char a;
            a=pop();
            while(a!='('){
                postfix[j]=a;
                a=pop();
            }
        }else{
            printf("Invalid Expression");
        }
    }
    postfix[j]='\0';
    printf("Postfix Expression\n");
    puts(postfix);
    getch();
}

void push(char a)
{
    char y;
    y=a;    
    top++;
    stack[top]=y;
}

char pop()
{
    char ch;
    ch=stack[top];
    top--;
    return(ch);
}

int is_operator(char i)
{
    if(i=='+'||i=='-'||i=='/'||i=='*'||i=='%'){
        return(1);    
    }else{
        return(0);
    }
}

int precedence(char c)
{
    if(c=='/'||c=='*'||c=='%'){    
        return(2);
    }else if(c=='+'||c=='-'){    
        return(1);
    }else{
        return(0);
    }
}

0 个答案:

没有答案