許多程序最有效&最簡單的解決方案需要以評估像表達式:表達式求值C++
輸入:(T(TF))--->輸出:假(T爲真,和F爲假)
OR
輸入((公元前2年)3)$ --->輸出:abcbcabcbcabcbc
換句話說,如何處理包含括號表達式?
我用來推動堆棧直到達到')'。 那麼,波普直到我到達「(」,等等。 但是這需要很長的執行時間和小喬代碼!
,如果我試圖把好@Henrik代碼來解決算術表達式,我結束了一個錯誤的答案提前
許多程序最有效&最簡單的解決方案需要以評估像表達式:表達式求值C++
輸入:(T(TF))--->輸出:假(T爲真,和F爲假)
OR
輸入((公元前2年)3)$ --->輸出:abcbcabcbcabcbc
換句話說,如何處理包含括號表達式?
我用來推動堆棧直到達到')'。 那麼,波普直到我到達「(」,等等。 但是這需要很長的執行時間和小喬代碼!
,如果我試圖把好@Henrik代碼來解決算術表達式,我結束了一個錯誤的答案提前
#include <iostream>
using namespace std;
const char * expressionToParse = "(T(TT))";
char peek()
{
return *expressionToParse;
}
char get()
{
return *expressionToParse++;
}
bool expression();
bool number()
{
bool result = get() - '0';
//even if I remove -'0'
cout<<"number() result:"<<result<<endl;
while (peek() == 'T' || peek() == 'F')
{
if (peek()=='T' && get()=='T') {
result=true;
}
else{
result=false;
}
}
return result;
}
bool factor()
{
if (peek() == 'T' && peek() <= 'F')
return number();
else if (peek() == '(')
{
get(); // '('
bool result = expression();
get(); // ')'
return result;
}
return 0; // error
}
bool expression()
{
bool result = factor();
return result;
}
int main()
{
bool result = expression();
if(result){
cout<<"true";
}
else{
cout<<"false";
}
return 0;
}
由於這是後綴形式的表現。評價一個後綴表達式最簡單的方法可以使用堆棧來完成的記錄。「後綴表達式求值」教程。
嗯,我正在尋找中綴表達評估,如果我是正確的,它需要時間來轉換爲後綴然後評估,無論如何感謝你。 –
'(a(b c 2)3)$' - >這確實是後綴,字符是操作數,數字是操作符。沒有必要進行轉換和評估後綴表達式是世界上最簡單的堆棧之一。 '(T(TF))' - >這對我來說是模棱兩可的,在這個表達式中我看不到任何運算符,所以我甚至不能確定這個表達式的類型。它對我來說是一個謎你怎麼得到'F'由於這個... – pasztorpisti
謝謝你的解釋,並且對於(T(TF))我認爲操作符隱含(和)每兩個操作數 –
使用圖書館,例如助推精神:http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/index.html –
謝謝,我會搜索它來獲得這個想法,但它是在C++上工作嗎? 3.4.2? –
嗯,反思也許它不是最好的東西推薦...這不是最容易開始使用 –