首页 >后端开发 >C++ >如何在 C 中安全地将字符串转换为双精度并处理非数字字符串?

如何在 C 中安全地将字符串转换为双精度并处理非数字字符串?

Patricia Arquette
Patricia Arquette原创
2024-10-26 07:28:301014浏览

How to Safely Convert Strings to Doubles in C   and Handle Non-Numerical Strings?

在 C 中将字符串转换为双精度数,并对非数字字符串进行特殊处理

在 C 中,可以使用以下命令无缝地将字符串转换为双精度数内置函数。然而,区分数字字符串和非数字字符串变得至关重要。为了应对这一挑战,我们提出了一个针对非数字字符串返回 0 的解决方案。

函数实现:

我们解决方案的核心在于 string_to_double 函数:

<code class="cpp">#include <sstream>

double string_to_double(const std::string& s) {
  std::istringstream i(s);
  double x;
  if (!(i >> x))
    return 0;
  return x;
}</code>

工作原理:

  1. 我们创建一个输入字符串流(std::istringstream)对象 i 来安全地读取字符串。
  2. 我们尝试从流中提取双精度值。如果成功,则将 double 赋值给 x。
  3. 如果无法提取 double(i >> x 失败),则返回 0,表示非数字字符串。

测试函数:

在提供的测试用例中,我们演示了函数如何正确解释不同的数字和非数字字符串:

<code class="cpp">int main() {
  assert(0.5 == string_to_double("0.5"));
  assert(0.5 == string_to_double("0.5 "));
  assert(0.5 == string_to_double(" 0.5"));
  assert(0.5 == string_to_double("0.5a"));

  // Non-numerical strings will return 0:
  assert(0 == string_to_double("foobar"));
}</code>

限制:

需要注意的是,由于非数字字符串返回 0 的特定要求,无法区分代表零的数字字符串和真正的非数字字符串。

以上是如何在 C 中安全地将字符串转换为双精度并处理非数字字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn