給出乙個表示式,求取表示式的值

2021-08-29 10:14:43 字數 1113 閱讀 2303

#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入棧...