【问题标题】:Error handling casting to double with stringstream错误处理转换为使用 stringstream 加倍
【发布时间】:2017-03-13 12:34:27
【问题描述】:
#include <iostream>
#include <string>
#include <sstream>

int main() {
  std::istringstream iss;
  iss.str("1.23@45");
  double result;
  iss >> result;
  std::cout << result << std::endl;

  if (!iss.eof() || iss.fail()) {
    std::cout << "error occurred" << std::endl;
  }
}

输出是

1.23
error occurred

是否有更好的解决方案来检查所有字符是否已被处理?

更新

另外,我想知道是否有任何方法可以检测 超出范围 错误。

【问题讨论】:

  • 你可能对boost::lexical_cast感兴趣。
  • @Angew,我需要依赖于区域设置的转换,而不需要全局设置区域设置,因此我选择基于流的解决方案。
  • 如果有尾随空格是合法的,您可能想要使用iss &gt;&gt; result &gt;&gt; std::ws;。否则,我认为这是最好的。

标签: c++ error-handling casting stringstream istringstream


【解决方案1】:
if (!iss.eof() || iss.fail())

由于字符串流尚未到达流的末尾。 eof() 显然是假的,这个if() 条件将评估为真。

结果正确:并非所有字符都已处理。

【讨论】:

  • 是的,我已经用单元测试介绍了解决方案,它可以工作。但是解决方案看起来很庞大,所以我想知道是否存在更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2014-05-29
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多