資源簡介
將含有加減乘除的算術表達式中綴形式轉換成后綴形式輸出

代碼片段和文件信息
#include?
using?namespace?std;
#define?MAX?100
char?stock[MAX];
int?top=-1;
void?fun(?char?a[]char?b[])
{
????int?ilenj;
????len=strlen(a);
????j=-1;
????for(i=0;i ????{
????????switch(a[i])
????????{
????????case?‘(‘:stock[++top]=‘(‘;break;//若a[i]為左括弧“(”則將此括弧入棧stock
????????case?‘-‘://若a[i]為“+”或“-”則將當前棧stock中“(”以前的所有字符(運算符)依次刪除
?????????????????//并存入數組b中然后將a[i]入棧stock中
????????case?‘+‘:while(top>=0&&stock[top]!=‘(‘)
??????????????????????b[++j]=stock[top--];
????????????????stock[++top]=‘?‘;
????????????????stock[++top]=a[i];
????????????????????break;
????????case?‘*‘://若a[i]為“*”或“/”則將當前棧stock中的棧頂端連續的“*”或“/”刪除
?????????????????//并依次存入數組b中然后將a[i]入棧stock中
????????case?‘/‘:while(top>=0&&stock[top]!=‘(‘&&stock[top]!=‘+‘&&stock[top]!=‘-‘)
?????????????????????b[++j]=stock[top--];
????????????????stock[++top]=‘?‘;
????????????????stock[++top]=a[i];
????????????????break;
????????case‘)‘:while(stock[top]!=‘(‘)//若ch為右括弧“)”則將棧op中左括弧“(”以前的字符依次刪除
????????????????????b[++j]=stock[top--];//并存入數組b中
????????????????top--;//然后將左括弧“(”刪除
????????????????break;
????????default://若a[i]為數字將后續的所有數字均依次存入數組b中
????????????????//并以字符“?”標志數值串結束
????????????????b[++j]=a[i];
????????????????if(i==len-1)
????????????????{
????????????????????b[++j]=‘?‘;
????????????????????break;
????????????????}
????????????????else
????????????????????if(a[i+1]<=‘0‘||a[i+1]>=‘9‘)
????????????????????{
????????????????????????b[++j]=‘?‘;
????????????????????}
????????}
????}
????while(top>=0)
????????b[++j]=stock[top--];//若字符串a掃描完畢則將棧stock中的所有運算符依次刪除并存入數組b中
????b[++j]=‘\0‘;
????for(i=0;i<=j;i++)//最后可得到表達式的后綴表示在數組b中
????????cout<}
void?compvalue(char?exp[])
{
????int?ilensum=0c;
????top=-1;
????int?digit[MAX];
????len=strlen(exp);
????for(i=0;i ????{
????????switch(?exp[i]?)
????????{
????????case‘?‘:?break;
????????case‘+‘:?sum=digit[top]+digit[top-1];
????????????????digit[--top]=sum;
????????????????break;
????????case‘-‘:sum=digit[top-1]-digit[top];
????????????????digit[--top]=sum;
????????????????break;
????????case‘*‘:sum=digit[top]*digit[top-1];
????????????????digit[--top]=sum;
????????????????break;
????????case‘/‘:sum=digit[top-1]/digit[top];
????????????????digit[--top]=sum;
????????????????break;
????????default:
????????????????c=0;
????????????????while(exp[i]>=‘0‘&&exp[i]<=‘9‘)
????????????????{
????????????????????c=c*10+exp[i]-48;
????????????????????i++;
????????????????}
????????????????digit[++top]=c;
????????}
????}
????cout< }
int?main()
{
????char?a[MAX]b[MAX];
????cin>>a;//數組a用于存放用戶輸入的中綴表達式
????fun(ab);//函數調用,用于將中綴轉換成后綴
????cout<<“?“;
????compvalue(b);//用于計算中綴表達式結果
????return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????604503??2009-05-18?22:12??c++中綴轉后綴\bin\Debug\stock.exe
?????文件???????3047??2009-05-18?22:12??c++中綴轉后綴\main.cpp
?????文件?????118556??2009-05-18?22:12??c++中綴轉后綴\obj\Debug\main.o
?????文件???????1100??2009-05-17?19:39??c++中綴轉后綴\stock.cbp
?????文件????????215??2009-05-18?22:14??c++中綴轉后綴\stock.depend
?????文件????????241??2009-05-18?22:15??c++中綴轉后綴\stock.layout
?????目錄??????????0??2009-12-08?22:15??c++中綴轉后綴\bin\Debug
?????目錄??????????0??2009-12-08?22:15??c++中綴轉后綴\obj\Debug
?????目錄??????????0??2009-12-08?22:15??c++中綴轉后綴\bin
?????目錄??????????0??2009-12-08?22:15??c++中綴轉后綴\obj
?????目錄??????????0??2009-12-08?22:15??c++中綴轉后綴
-----------?---------??----------?-----??----
???????????????727662????????????????????11
- 上一篇:計算機專業英語論文原文+翻譯
- 下一篇:測試文件及答案
評論
共有 條評論