?? infix.h
字號(hào):
#include"Priority.h"
//中綴類Infix的聲明,類Infix封裝著中綴表達(dá)式的運(yùn)算功能
class Infix
{
private:
int a,b;
char Theta;
LinkStack<int> OPND;
LinkStack<char> OPTR;
public:
Infix(); //中綴表達(dá)式的類構(gòu)造函數(shù)
void InExpress(string &exp); //中綴表達(dá)式的計(jì)算函數(shù)
int Operate(int a,char theta,int b); //兩個(gè)數(shù)之間的四則運(yùn)算函數(shù)
};
//類Infix的內(nèi)部函數(shù)定義
//類Infix的構(gòu)造函數(shù)
Infix::Infix()
{
OPTR.Push('#');
}
//中綴表達(dá)式計(jì)算函數(shù)的定義
void Infix::InExpress(string &exp)
{
Priority compare;
int i=0,temp;
while (!OPTR.Empty())
{
if (exp[i]<='9' && exp[i]>='0') //若為數(shù)字,則進(jìn)行入棧處理
{
temp=exp[i]-48;
while (exp[i+1]<='9' && exp[i+1]>='0')
{
temp=(temp*10)+(exp[i+1]-48);
i++;
}
OPND.Push(temp);
i++;
}
else
{if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/'||exp[i]=='('||exp[i]==')'||exp[i]=='#') //若為運(yùn)算符,則分情況處理
{
switch (compare.PriOPTR(OPTR.GetTop(),exp[i])){
case '<':
OPTR.Push(exp[i]);
i++;
break;
case '=':
OPTR.Pop();
i++;
break;
case '>':
cout<<'\n';
Theta=OPTR.Pop();
b=OPND.Pop();
a=OPND.Pop();
OPND.Push(Operate(a,Theta,b));
break;
default:
cout<<"Input Error";
cin.clear();
cin.ignore();
char a=cin.get();
exit(0);
}
}
else i++;}
}
if (OPND.Empty()){
cout <<"Input Error";
cin.clear();
cin.ignore();
char a=cin.get();
exit(0);
}
else cout <<"\n The Result is"<<OPND.GetTop();
}
//兩個(gè)元素的運(yùn)算函數(shù)
int Infix::Operate(int a, char theta, int b)
{
switch (theta){
case '+':
return (a+b);
break;
case '-':
return (a-b);
break;
case '*':
return (a*b);
break;
case '/':
return (a/b);
break;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -