我有一个带算术的输入文件(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
答案 0 :(得分:3)
boost::lexical_cast
不是解析器/计算器。您可以使用Boost.Spirit执行此操作。关于如何实现这样一个计算器有O'Reilley example,但正如你所看到的那样,它不是直截了当的。
如果您想要实现一个简单的解析器,问题OpenSouce C/C++ Math expression parser Library和Evaluating arithmetic expressions in C++可能是一个很好的起点。
答案 1 :(得分:1)
解决方案可能是再次拆分字符串,如果字符串中有算术运算符,则对两个子字符串执行转换,然后执行arithemtic操作。
我不认为boost :: lexical_cast或类似的东西可以做到这一点或打算这样做。