首頁  >  文章  >  後端開發  >  如何在 C 中安全地將字串轉換為整數?

如何在 C 中安全地將字串轉換為整數?

Susan Sarandon
Susan Sarandon原創
2024-11-05 14:23:02961瀏覽

How to Safely Convert a String to an Integer in C  ?

在C 中使用Bool/Fail 將字串轉換為Int

簡介:

在C 中,將字串轉換為整數可能是一項簡單的任務,但在某些情況下我們可能會遇到轉換失敗。在這種情況下,有必要優雅地處理這些異常或失敗。

Boost::lexical_cast:

Boost 提供了一個具有許多實用程式的多功能函式庫,包括 boost: :lexical_cast。該函數允許將字串轉換為各種資料類型,並在失敗時拋出異常。例如:

<code class="cpp">#include <boost/lexical_cast.hpp>
int i = boost::lexical_cast<int>(s);</code>

沒有Boost:

如果Boost 不可用,我們可以使用基於C 流的方法:

<code class="cpp">#include <sstream>
int i;
std::stringstream ss(s);
if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
  throw std::bad_cast();
}</code>

偽造Boost:

在沒有Boost 的情況下,可以建立模仿其功能的自訂函數:

<code class="cpp">template <typename T>
T lexical_cast(const std::string& s) {
  std::stringstream ss(s);
  T result;
  if ((ss >> result).fail() || !(ss >> std::ws).eof()) {
    throw std::bad_cast();
  }
  return result;
}</code>

否-拋出版本:

如果需要,可以透過捕捉適當的異常並傳回指示成功或失敗的布林值來建立這些函數的非拋出版本:

<code class="cpp">bool lexical_cast(const std::string& s, T& t) {
  try {
    t = lexical_cast<T>(s);
    return true;
  } catch (const std::bad_cast& e) {
    return false;
  }
}</code>

以上是如何在 C 中安全地將字串轉換為整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn