int main()
{
    int i=0,j=0,x,item;
    printf("enter infix expression\n");
    gets(inexp);
   // puts(inexp);
    item=inexp[i];i++;
    while(item!='\0')
    {
                  if(item=='(')
                  {
                               push(item);
                               }
                  else if((item>='A'&&item<='Z')||(item>='a'&&item<='z'))
                  {
                       postexp[j]=item;j++;
                       }
                  else if(isop(item)==1)
                  {
                       x=pop();
                     while(isop(x)==1&&(preced(x)>=preced(item)))
                     {
                          postexp[j]=x;j++;
                          x=pop();
                          }
                         push(x);
                         push(item);
                         }
                  else if(item==')')
                  {
                                   x=pop();
                                   while(x!='(')
                                   {
                                                postexp[j]=x;
                                                j++;
                                                x=pop();
                                                }
                                                }
                      else
                      {
                          printf("\ninvalid arithmetic expression");
                          }
                  item=inexp[i];
                  i++;
                  }
                  x=pop();
                  while(x!='a')
                  {
                               postexp[j]=x;
                               j++;
                               x=pop();
                               }
                  postexp[j++]='\0';
                  printf("\npostfix expression\n");
                  puts(postexp);
                  getch();
                  return 0;
}
示例#2
0
void main()
{

	char str[100],temp;
	int len,inp_ptr=0,f,prec,no;
	printf("\nEnter the expression :");
	scanf("%s",str);
	push('$');
	len=strlen(str);
	str[len]='$';
	str[len+1]='\0';
	puts(str);
	while(str[inp_ptr]!='$'|| peek()!='$')
	{
		f=0;
		printf("\nin the while");


		if(str[inp_ptr]>='0'&&str[inp_ptr]<='9'){
			no=atoi(&str[inp_ptr++]);	
				printf("#####%d###",no);
			while(str[inp_ptr]<='0'&&str[inp_ptr]>='9')
				inp_ptr++;
			str[inp_ptr--]='i';
			f=1;
			}

	prec=preced(peek(),str[inp_ptr]);
	printf("@@%d@@",prec);
	printf("reached here1");
	if(prec==0)
	{
		if(f==1)
			pushres(no);
		push(str[inp_ptr++]);
	}
	else if(prec==1)
	{
	do{
	temp=pop();
	printf("reached here<F2>");
	switch(temp){
	case '+':	pushres(popres()+popres());break;
	case '*':	pushres(popres()*popres());break;
		    }
	}while(preced(peek(),temp)!=0);
	}	
	else
		error();
}
	printf("Result=%d\n",popres());
}
示例#3
0
void in_to_post(char infix[])
{
int length;
static int index=0,pos=0;
char symbol,temp;
char postfix[40];
length=strlen(infix);
push('#');
while(index<length)
{
symbol=infix[index];
switch(symbol)
{
case'(':push(symbol);
break;
case')' :temp=pop();
while(temp!='(')
{
postfix[pos]=temp;
pos++;
temp=pop();
}
break;
case '+' :
case '-' :
case '*' :
case '/' :
case '^' :
while (preced(stack[top])>=preced(symbol))
{
temp=pop();
postfix[pos]=temp;
pos++;
}
push(symbol);
break;
default : postfix[pos++]=symbol;
break;
}
index++;
}
while(top>0)
{
temp=pop();
postfix[pos++]=temp;
}
postfix[pos++]='\0';
puts(postfix);
return;
}