使用带有算术表达式的boost :: lexical_cast

时间:2012-07-17 14:31:27

标签: c++ boost

我有一个带算术的输入文件(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");

然而,Boost抛出

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

2 个答案:

答案 0 :(得分:3)

boost::lexical_cast不是解析器/计算器。您可以使用Boost.Spirit执行此操作。关于如何实现这样一个计算器有O'Reilley example,但正如你所看到的那样,它不是直截了当的。

如果您想要实现一个简单的解析器,问题OpenSouce C/C++ Math expression parser LibraryEvaluating arithmetic expressions in C++可能是一个很好的起点。

答案 1 :(得分:1)

解决方案可能是再次拆分字符串,如果字符串中有算术运算符,则对两个子字符串执行转换,然后执行arithemtic操作。

我不认为boost :: lexical_cast或类似的东西可以做到这一点或打算这样做。