資源簡介
用dev c++寫的代碼,附有啰里啰嗦的注釋和測試樣例。太簡單了不好意思要分。
代碼片段和文件信息
#include? //中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式?
#include? //通過使用棧暫存運算符,實現(xiàn)運算符位置的調(diào)整?
#include? //tips:?中綴表達(dá)式即常見的表達(dá)式,可以用二叉樹表示。對該二叉?
#include? //樹進(jìn)行后序遍歷可以得到后綴表達(dá)式(逆波蘭表達(dá)式)。?
#include?
using?namespace?std;
bool?isOperand(char?c); //判斷是否為操作數(shù)(變量)?
bool?isOperator(char?c); //判斷是否為操作符(運算符)?
bool?isHigherOperator(char?achar?b); //判斷操作符a的優(yōu)先級是否高于b?
string?generalToRvsPolish(string?expression);//將中綴表達(dá)式轉(zhuǎn)為后綴表達(dá)式?
int?main()
{
while(true)
{
string?expression; //變量由單個字母表示,運算符僅限+-*/()
getline(cinexpression); //中間空格不影響結(jié)果?
string?rvsPolishNotation=generalToRvsPolish(expression);
cout< }
return?0;
}
bool?isOperand(char?c)
{
if((c>=‘a(chǎn)‘&&c<=‘z‘)||(c>=‘A‘&&c<=‘Z‘))
return?true;
else
return?false;
}
bool?isOperator(char?c)
{
if(c==‘+‘||c==‘-‘||c==‘*‘||c==‘/‘||c==‘(‘||c==‘)‘)
return?true;
else
return?false;
}
bool?isHigherOperator(char?achar?b) //a大于b為true,a小于等于b為false?
{
if(a==‘(‘||b==‘(‘) //左括號無優(yōu)先級,可視為既與+-的優(yōu)先級相同,又與*/的優(yōu)先級相同?
return?true;
else?if(b==‘*‘||b==‘/‘)
return?false;
else?if(a==‘*‘||a==‘/‘)
return?true;
else
return?false;
}
string?generalToRvsPolish(string?expression)
{
int?len=expression.length();
char*?rvsPoCharArray=new?char[len]; //暫存后綴表達(dá)式的char數(shù)組?
int?j=0; //rvsPoCharArray當(dāng)前處理的位置下標(biāo)?
stack?operatorStack; //暫存操作符的棧,棧中始終保持上面的操作符的優(yōu)先級高于下面的操作符,這是實現(xiàn)調(diào)整的關(guān)鍵?
for(int?i=0;i {
//cout<<“cur:?“<pression[i]< if(isOperand(expression[i])==true) //若為操作數(shù)直接輸出到rvsPoCharArray?
{
rvsPoCharArray[j]=expression[i];
j++;
}
if(isOperator(expression[i])==true) //字符為操作符,進(jìn)行必要的調(diào)整?
{
if(operatorStack.empty()==true) //棧為空的情況:操作符直接入棧(若
評論
共有 條評論