![]() |
|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
![]() |
#1 |
|
![]() 題目
Input: 鍵入「有多餘無用括符之中序式運算式」: (((a+((b*c)/(d-e))))*(f+g))之一行字串 Output: 顯示「無多於無用括符之中序式運算式」: (a+b*c/(d-e))*(f+g)之一行字串 我寫到這邊 但是還是怪怪的 麻煩大大幫我看一下 語法:
#include<iostream.h> #define N 80 char stack[N]; int top=-1; char infix[N]; /*儲存中序運算式*/ char postfix[N]; /*儲存後序運算式*/ /*加入資料於堆疊內*/ void push(int d) { if(top == N-1) { cout<<"堆疊滿了\n"; } stack[++top]=d; } /*刪除堆疊的頂端資料*/ char pop() { if(top == -1){ cout<<"堆疊空了\n"; } return(stack[top--]); } /*取得運算符的優先權*/ int p(char d) { if(d=='*'||d=='/') /*乘除運算符優先權最高*/ return(2); else if(d=='+'||d=='-') /*加減運算符優先權次之*/ return(1); else /*否則必為'(',優先權最低*/ return(0); } /*中序運算式轉為後序運算式*/ void infix_to_postfix() { char token; int i=0, j=0; while((token=infix[i++])!='\0'){ /*讀取下一字元,並判斷是否為結束字元*/ switch(token){ case '(':push(token); break; case ')':while(stack[top]!='(') postfix[j++]=pop(); pop(); /*將'('從堆疊內取出後丟棄不要*/ break; case '+': case '-': case '*': case '/':/*不為空堆疊時,比較優先權*/ while((top!= -1)&&(p(stack[top])>=p(token))) postfix[j++]=pop(); push(token); break; 預設:postfix[j++]=token; /*token為運算元時直接放入後序式*/ } /* end of switch */ } /* end of while */ while(top != -1) postfix[j++]=pop(); } /* end of infix_to_postfix */ /*主程式*/ void main() { cout<<"輸入中序四則運算式:"; infix_to_postfix(); /*呼叫函數將中序式轉為後序式*/ cout<<"則後序四則運算式為:"; } |
送花文章: 0,
![]() |