#include #include #include #include #include using namespace std;
/***
思路:1.字串預處理,針對可能出現的「,[,],-」等特殊情況進行替換,判斷『-』是負號還是減號,負號前面+0,轉變成減法運算
2.將中綴字串轉變為字尾字串陣列
3.對字尾字串陣列進行求解
***/
int main(int argc, char const *argv)
void calcexp(string &str)
vstr.push_back(temp);
} //棧空或遇見字元'('
else if(cstack.empty()||str[i]=='(')
cstack.push(str[i]);
//若棧頂優先順序高
else if(cmppriority(cstack.top(),str[i]))
cstack.pop();
}//棧中優先順序高的元素出棧,入字串陣列,直到優先順序低於當前字元
else
cstack.push(str[i]);
}} //當前字元優先順序高於棧頂元素,直接入棧
else
cstack.push(str[i]);
} //棧中還存在運算子時:出棧,存入字串陣列
while(!cstack.empty)
return vstr;
}//比較當前字元與棧頂字元的優先順序,若棧頂高,返回true
bool cmppriority(char top,char cur)
//對字尾表示式進行求值:主要是根據運算子取出兩個運算元進行運算
double calcpostexp(vector&vstr)
//若是操作符,取出兩個運算元,進行運算,並將結果存入
else if(vstr[i]=='+')
else if(vstr[i]=='-')
else if(vstr[i]=='*')
else if(vstr[i]=='/')
} return opstack.top();
}
中綴表示式轉字尾表示式 求表示式的值
中綴轉字尾需要遵守以下規則 1 運算元 直接輸出 2 直接入棧 3 將 以前的直接輸出,並將 出棧 不輸出 4 運算子 將優先順序不小於該運算子的操作符出棧,最後將該運算子入棧 5 最後將棧中的元素依次彈出 6 優先順序 大於 大於 class intosuf if op i equals if o...
表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...
中綴表示式轉字尾表示式 求字尾表示式值
中綴表示式轉字尾表示式 佇列q和棧s q存放字尾表示式結果 s存放操作符 設棧頂元素top 當前讀取元素a 演算法如果s是空棧 a入棧非空棧 a不是操作符,a插入佇列q 如果a為 a入棧 否則,如果a為 把棧內操作符出棧依次插入佇列q,直至遇到得 元素出棧為止 否則,如果a優先順序大於top,a入棧...