2012-07-17 38 views
2

我有一個包含算術的輸入文件(ASCII),例如:
TEST;0.0;0.0+0.1;0.0+0.2在算術表達式中使用boost :: lexical_cast

我可以讀取字符串並相應地拆分它,所以我已經有了std::string的元素。現在我想用boost::lexical_cast<double>存儲它在雙,相當於像一個表達式:

double d = boost::lexical_cast<double>("0.0+0.1"); 

然而,加速拋出

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_lexical_cast> >' 
what(): bad lexical cast: source type value could not be interpreted as target 

有沒有去,也許沒有sscanf的好辦法? (如果sscanf將能夠這樣做的所有的...)

TIA

+7

等待,您希望lexical_cast爲您計算0.0 + 0.1? – PlasmaHH 2012-07-17 14:33:07

+0

你的表情有多複雜?用圓括號嵌套任意深度?你想要實現哪些操作符? – robert 2012-07-17 14:34:21

+0

@PlasmaHH是的,我認爲是。要問的問題太多了? – Gunnar 2012-07-17 14:43:31

回答

3

boost::lexical_cast不是解析器/計算器。你可以使用Boost.Spirit來做到這一點。關於如何實現這樣一個計算器,有一個O'Reilley example,但正如你可以看到它不是直截了當的。

問題OpenSouce C/C++ Math expression parser LibraryEvaluating arithmetic expressions in C++可能是一個很好的起點,如果你想實現一個簡單的解析器。

+0

謝謝。似乎我有點苛求和天真。然而,爲了很少的好處而努力......我手動更改了ASCII值。不過謝謝! – Gunnar 2012-07-20 14:09:59

1

一個可以再次分割字符串,如果有一個算術運算符的字符串,做投兩個子,然後解決方案做法律操作。

我不認爲增強:: lexical_cast或類似的事情,或者是打算這樣做。