mercredi 1 juillet 2015

what is wrong with this code?i am unable to find what is wrong with this code?

i am trying to convert infix notation to postfix notation using stack.i have written the following code but it is giving me error(/Users/apple/Desktop/infix.c|49|error: expected expression ).and i am unable to find the error.please help me to correct this code....

 #include <stdio.h>
 #include<string.h>
 #include<stdlib.h>
 #include<ctype.h>
 #define MAX 100
 char st[MAX];
int top=-1;
 void push(char st[],char);
char pop(char st[]);
void InfixtoPostfix(char source[],char target[]);
int getPriority(char);
int main() {
char infix[100],postfix[100];
printf("enter any infix expression");
fflush(stdin);
gets(infix);
strcpy(postfix,"");
InfixtoPostfix(infix,postfix);
printf("\n the corrsponding postfix expression is:");
puts(postfix);
return 0;
}
void InfixtoPostfix(char source[],char target[])
{
int i=0,j=0;
char temp;
strcpy(target,"");
while(source[i]!='\0')
{
    if(source[i]=='(')
    {
        push(st,source[i]);
        i++;
    }
    else if(source[i]==')')
    {
        while((top!=-1)&&(st[top]!='('))
        {
            target[j]=pop(st);
            j++;
        }
        if(top==-1)
        {
            printf("\n incorrect syntex");
            exit(1);
        }
        temp=pop(st);
        i++;
        else if((isdigit(source[i]))||(isalpha(source[i]))
        {
            target[j]=source[i];
            j++;
            i++;
        }
         else if(source[i]=='+'||source[i]=='-  '||source[i]=='*'||source[i]='/'||source[i]=='%d')
        {
            while((top!=-1)&&(st[top]!='(')&&(getPriority(st[top])>getPriority(source[i])))
            {
                target[j]=target[i];
                i++;
            }
            push(st,source[i]);
            i++;
        }
        else{
            printf("\n incorrect expression");
            exit(1);
        }
    }
    while((top!=-1)&&(st[top]!='('))
    {
        target[j]=pop(st);
        j++;
    }
    target[j]='\0';

    }
  }
int getPriority(char op)
{
    if(op=='/'||op=='*'||op=='%'||op=='%')
    return 1;
    else if(op=='+'||op=='-')
    return 0;
}
void push(char st[],char val)
{
    if(top==MAX-1)
      printf("overflow");
    else{
        top++;
        st[top]=val;
    }
}
char pop(char st[])
{
char val=' ';
if(top==-1)
 printf("underflow");
else{
    val=st[top];
    top--;
 }
 return val;
}

Aucun commentaire:

Enregistrer un commentaire