2

我有一个带有算术的输入文件(ASCII),例如
TEST;0.0;0.0+0.1;0.0+0.2

我可以读取字符串并相应地拆分它,所以我已经有了std::string. 现在我想用boost::lexical_cast<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

4

2 回答 2

3

boost::lexical_cast不是解析器/计算器。你可以使用Boost.Spirit来做到这一点。有一个关于如何实现这种计算器的O'Reilley 示例,但正如您所见,它并不简单。

如果您想实现一个简单的解析器, OpenSouce C/C++ 数学表达式解析器库计算 C++ 中的算术表达式可能是很好的起点。

于 2012-07-17T15:49:11.893 回答
1

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

我不认为 boost::lexical_cast 或任何类似的东西这样做或打算这样做。

于 2012-07-17T14:48:44.460 回答