【问题标题】:Converting a string containing binary operations to a double in C++ [closed]在 C++ 中将包含二进制操作的字符串转换为双精度 [关闭]
【发布时间】:2014-06-03 14:50:42
【问题描述】:

我有以下意图:

取一个字符串如:

 string test = "2.0+2.5";

并将其转换为双 4.5。这可能吗?我还想将其扩展到复杂类型。我在 Java 方面有更多经验,但我正在尝试使用 C++。我尝试使用 stringstream,但我最终得到的双精度只有 2。所以我想它停在“+”。感谢您的任何帮助或指点。

【问题讨论】:

  • 您需要一个表达式解析器/求值器。现在您知道了术语,您可以进行网络搜索。
  • 请说明您尝试了什么以及您的具体问题是什么;如果您还没有尝试过,那么现在还不是提问的时候:)
  • 大卫,谢谢你的指导。 Matthieu,请参阅已编辑的问题。
  • I have more experience with Java but I am trying to work with C++. 表达式评估与您使用的语言无关。您在 Java 中会遇到与在 C++(以及几乎任何其他非脚本语言)中相同的问题。
  • I attempted to use stringstream, however the double that I ended up with was only the 2. So I suppose it stops at the "+". 在编写另一行代码之前,您可能在解决这个问题时走错了路。如果你的表达式变得更复杂,我现在就告诉你,你不可能在你将要画自己的角落里“不画自己”。同样,有一种独立于语言的表达式解析方法你正在使用,它不仅仅是像你现在所做的那样遍历字符串。

标签: c++ string double stringio


【解决方案1】:

你不能在 C++ 中 eval 字符串,因为你可以在 Python etc 等经过编码的语言中。因此,您必须编写代码来解析语句,例如:

double v1 = lexical_cast<double>( /* extract "2.0" from test */);
double v2 = lexical_cast<double>( /* extract "2.5" from test */);
double result = 0.0;
char op = // extract '+' from test
switch(op) {
case '+':
    result = v1 + v2;
    break;
// etc

或者,您可以使用 Python 之类的脚本语言您的 C++ 代码到 eval 将语句作为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2016-06-12
    • 2013-10-10
    • 2015-04-10
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多