2

算術演算を含む入力ファイル (ASCII) があります。
TEST;0.0;0.0+0.1;0.0+0.2

文字列を読み取り、それに応じて分割できるので、既にstd::string. boost::lexical_cast<double>今、次のような式に匹敵する 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を行うことができれば...)

ティア

4

2 に答える 2

3

boost::lexical_castパーサー/計算機ではありません。Boost.Spiritを使用してこれを行うことができます。このような計算機の実装方法に関するO'Reilleyの例がありますが、ご覧のとおり、簡単ではありません。

質問OpenSouceC/ C ++数式パーサーライブラリC++での算術式の評価は、単純なパーサーを実装する場合の出発点として適しています。

于 2012-07-17T15:49:11.893 に答える
1

解決策は、文字列を再度分割することです。文字列に算術演算子がある場合は、両方の部分文字列のキャストを実行してから、算術演算を実行します。

私は、boost::lexical_cast や同様のものがこれを行う、またはこれを行うことを意図しているとは思いません。

于 2012-07-17T14:48:44.460 に答える