首頁  >  文章  >  後端開發  >  如何在 C 中安全地將字串轉換為雙精度並處理非數字字串?

如何在 C 中安全地將字串轉換為雙精度並處理非數字字串?

Patricia Arquette
Patricia Arquette原創
2024-10-26 07:28:30918瀏覽

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. 工作原理: >
  2. 我們建立一個輸入字串流(std::istringstream)物件i 來安全地讀取字串。
  3. 我們嘗試從流中提取雙精度值。如果成功,則將 double 賦值給 x。
如果無法提取 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