2016-12-24 128 views
0

我剛開始玩MuParser - 看起來像一個非常酷的庫!但是,我堅持解析下面的表達式。任何人都可以從下面的代碼片段中看到我要出錯的地方嗎?無論「計數」是什麼結果總是似乎是0?C++ MuParser解析不像預期的那樣運行

mu::Parser parser; 

string rule = "(n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)"; 
parser.DefineConst("n", count); 
parser.SetExpr(rule); 
int retVal = parser.Eval(); 

謝謝!

+0

的確,表達式似乎不可滿足,不是嗎? –

回答

0

所以,我認爲你的代碼是錯誤的。它在運行時下降。 你可以把你的代碼放在try {} catch {}中找到你的問題。 例如:

 try 
{ 
    mu::Parser parser; 
    string rule = "(n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)"; 
    parser.DefineConst("n", count); 
    parser.SetExpr(rule); 
    int retVal = parser.Eval(); 

    std::cout << retVal << std::endl; 

} 
catch (Parser::exception_type &e) 
{ 
    std::cout << e.GetMsg() << std::endl; 
} 
+0

這很奇怪。我發佈的代碼塊實際上是用try/catch包裝的。它不是爲我而投擲,但你說它對你有用嗎?另外,我在調試器中評估表達式,在運行時將n換爲0,並得到2,這是我所期望的結果。我會仔細檢查... – user7227230

+0

好的。太瘋狂了。所以我已經重新運行了,現在我得到它來拋出一個異常,就像你在位置2所說的那樣,它看起來不像mod'%'符號。是否有一些設置需要mods? – user7227230

+0

啊。它看起來像mod運營商不支持 - https://github.com/beltoforion/muparser/issues/20 這是一個恥辱。我想知道是否有一種簡單的方法來爲此添加/擴展? – user7227230

1

對於任何有興趣的人。我添加了一個模運算符,加入以下內容:

parser.DefineOprtChars("%"); 
parser.DefineOprt("%", moduloOperator, mu::prINFIX); 

double moduloOperator(double v, double w) { 
     return (int)v % MAX(1, (int)w); 
}; 
+0

是的。我運行你的代碼,我的錯誤是未定義的符號「%」。 –

相關問題