首頁 > 後端開發 > C++ > 在 C 中將字串轉換為整數時如何處理轉換錯誤?

在 C 中將字串轉換為整數時如何處理轉換錯誤?

Patricia Arquette
發布: 2024-11-04 20:21:01
原創
805 人瀏覽過

How can I handle conversion errors when converting a string to an integer in C  ?

使用 C 中的錯誤處理將字串轉換為 int

將字串轉換為整數是程式設計中的常見任務。但是,在某些情況下,字串值可能無法成功轉換為整數。在這種情況下,優雅地處理轉換失敗至關重要。

boost::lexical_cast

將字串轉換為 int 時出現錯誤的最簡單方法之一處理方法是使用 boost::lexical_cast 函數。如果轉換無法繼續,此函數會拋出異常,允許我們捕獲它並做出適當的響應。

<code class="cpp">#include <boost/lexical_cast.hpp>

int main() {
  std::string s;
  std::cin >> s;

  try {
    int i = boost::lexical_cast<int>(s);
  } catch (...) {
    // Handle the conversion failure
  }
}</code>
登入後複製

使用標準函式庫函數

另一個不使用的方法boost 是利用標準函式庫函數,例如 std::stringstream 和 std::bad_cast。

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

int main() {
  std::string s;
  std::cin >> s;

  std::stringstream ss(s);
  int i;

  if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
    throw std::bad_cast();
  }
}</code>
登入後複製

自訂函數

為了可自訂性,您可以建立一個模擬 boost::lexical_cast 功能並管理轉換失敗的函數。

<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">template <typename T>
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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板