2012-05-10 7 views
1

このプログラムは、基本的に後置に変換します。問題は、-/は次のようにスマイリーフェイスになります:)文字列出力にスマイリーが入る原因は何ですか?

問題は、意図したマイナス記号や除算記号ではなく、別の文字を表示するという問題です。

// the program is used to convert a infix expression to a postfix expression 



#include<iostream> 
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
#include<stdlib.h> 
#include<string> 

using namespace std; 


const int size =50; 
char infix[size],postfix[size],stack[size]; 
int top=-1; 

int precedence(char ch); // function to get the precedence of the operator 
char pop(); //function to pop an element from the stack 
char topelement(); // returns the top element of the stack 
void push(char ch); // pushes an element into the stack 



int main() 
{ 
    char ele,elem,st[2]; 
    int prep,pre,popped,j=0,chk=0; 
    char strr[50]; 
    cout<<"Enter infix notation : "<<endl; 
    cin>>infix; 
    strcpy(postfix," "); 

    //gets(infix); 

    for(int i=0;infix[i]!=0;i++) 
      { 
        if(infix[i]!='('&&infix[i]!=')'&&infix[i]!='^'&&infix[i]!='*'&&infix[i]!='/'&&infix[i]!='+'&&infix[i]!='-')  
         postfix[j++]=infix[i]; 
        else if(infix[i]=='(') 
         { 
         elem=infix[i]; 
         push(elem); 
         } 
        else if(infix[i]==')') 
         { 
         while(popped=pop() != '(') 
          postfix[j++]=popped; 
         } 
        else 
         { 
         elem=infix[i]; 
         pre=precedence(elem);//stores the precedence of operator coming frm infix 
         ele=topelement(); 
         prep=precedence(ele);//stores the precedence of operator at the top of the stack 

         if(pre > prep) 
          push(elem);           

         else 
          { 
           while(prep >= pre) 
            { 
            if(ele=='#') 
             break; 
            popped=pop(); 
            ele=topelement(); 
            postfix[j++]=popped; 
            prep=precedence(ele); 
            } 
            push(elem); 
          } 
         } 
      } 

      while((popped=pop())!='#') 
       postfix[j++]=popped; 
      postfix[j]='\0'; 

      cout<<"\n post fix :"<<postfix<<endl; 

      system("pause"); 
      return 0; 
} 

int precedence(char ch) 
{ 
     switch(ch) 
      { 
       case '^' : return 5; 
       case '/' : return 4; 
       case '*' : return 4;            
       case '+' : return 3; 
       case '-' : return 3; 
       default : return 0; 
      } 
} 

char pop()     //function to pop the element from the stack 
{ 
    char ret; 
    if(top!=-1) 
     { ret =stack[top]; 
      top--; 
      return ret; 
     } 
    else 
     return '#'; 
} 

char topelement()   // function to return top element from the stack without popping 
{  
     char ch; 
     if(top!=-1) 
     ch=stack[top]; 
     else 
     ch='#'; 
     return ch; 
} 

void push(char ch)   // function to push an element in the stack 
{ 
    if(top!=size-1) 
     { 
      top++; 
      stack[top]= ch; 
     } 
}   

enter image description here

すべて-/あなたが(代わりに、意図-/の)\x01文字を印刷しているコード

答えて