2012-12-10 51 views
0

我想綴轉換爲後綴表達更大不起作用。綴與postfix使用單一堆棧數比9

OKI我得到它的工作,但我有麻煩搞清楚,如果你輸入像5 * 3 + -1.2那麼它的,如果你想有一個像負數不是要去工作。這是我的代碼:

void infix2postfix(char* infix, char* postfix){ 
    char *in,*post; 
     Stack<char>Q; 
     char n; 
     in = &infix[0]; 
     post = &postfix[0]; 
     while(*in){ 
      while(*in == ' ' || *in == '\t'){ 
       in++; 
      } 
      if(isdigit(*in) || isalpha(*in)){ 
       while(isdigit(*in) || isalpha(*in)){ 
        *post = *in; 
        post++; 
        in++; 
       } 
      } 
      if(*in == '('){ 
       Q.Push(*in); 
       in++; 
      } 
      if(*in == ')'){ 
       n = Q.Pop(); 
       while(n != '('){ 
        *post = n; 
        post++; 
        n = Q.Pop(); 
       } 
       in++; 
      } 
      if(operand(*in)){ 
       if(Q.IsEmpty()) 
        Q.Push(*in); 
       else{ 
        n = Q.Pop(); 
        while(priority(n) >= priority(*in)){ 
         *post = n; 
         post++; 
         n = Q.Pop(); 
        } 
        Q.Push(n); 
        Q.Push(*in); 
       } 
       in++; 
      } 
     } 
     while(!Q.IsEmpty()) 
     { 
      n = Q.Pop(); 
      *post = n; 
      post++; 

     } 
     *post = '\0'; 
    } 

它的工作原理,但我想它與一元運營商合作,因此將採取輸入4 * 5 + 4 + -1.2,所以除非是負數-1.2每個數字之間的空間。我的代碼也不適用於超過9的整數,如果我把10放在1 * 0上。 。

+0

問題是你有兩個運算符是連續的。試試這個表達式:'4 * 5 + 4 - 1.2'。請記住,添加負數與減去正數相同。你的語法規則如何區分減法運算符和一元減法(用於否定性)? –

回答

0

如果遇到-,你將不得不檢測這是否是一個運營商(subraction)或否定。

我建議你查一下前面的符號。如果以前的符號是一個運算符,那麼' - '可能是否定的。

+0

但如何檢測它,如果它是一個否定或減法,因爲我檢查,這是一個操作數,但 - 是一樣的,雖然 –

+0

當您收到「 - 」棧,檢查頂部。如果堆棧頂部的項目是一個數字,則將' - '作爲操作符對待,否則將其視爲負數。 –