C で文字列を整数に変換するときに変換エラーを処理するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-04 20:21:01
オリジナル
733 人が閲覧しました

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

C のエラー処理を使用して文字列を int に変換する

文字列を整数に変換することは、プログラミングにおける一般的なタスクです。ただし、文字列値を整数に正常に変換できない場合があります。このようなシナリオでは、変換の失敗を適切に処理することが重要です。

boost::lexical_cast

エラーを伴う文字列を int に変換する最も簡単な方法の 1 つ処理には 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!