Heim >Backend-Entwicklung >C++ >Wie kann ich Konvertierungsfehler beim Konvertieren einer Zeichenfolge in eine Ganzzahl in C behandeln?

Wie kann ich Konvertierungsfehler beim Konvertieren einer Zeichenfolge in eine Ganzzahl in C behandeln?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 20:21:01854Durchsuche

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

String in Int mit Fehlerbehandlung in C konvertieren

Das Konvertieren eines Strings in eine Ganzzahl ist eine häufige Aufgabe in der Programmierung. Es kann jedoch vorkommen, dass der Zeichenfolgenwert nicht erfolgreich in eine Ganzzahl konvertiert werden kann. In solchen Szenarien ist es wichtig, den Konvertierungsfehler ordnungsgemäß zu behandeln.

boost::lexical_cast

Eine der einfachsten Methoden zum Konvertieren eines Strings in einen Int-Wert mit Fehler Die Handhabung erfolgt über die Funktion boost::lexical_cast. Diese Funktion löst eine Ausnahme aus, wenn die Konvertierung nicht fortgesetzt werden kann, sodass wir sie abfangen und angemessen reagieren können.

<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>

Standardbibliotheksfunktionen verwenden

Ein alternativer Ansatz ohne Verwendung Boost besteht darin, die Standardbibliotheksfunktionen wie std::stringstream und std::bad_cast zu nutzen.

<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>

Benutzerdefinierte Funktion

Zur Anpassbarkeit können Sie eine erstellen Funktion, die die Funktionalität von boost::lexical_cast emuliert und die Konvertierungsfehler verwaltet.

<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>

Nicht auslösende Versionen

Wenn Sie das Auslösen von Ausnahmen lieber vermeiden möchten, sind Sie hier genau richtig kann No-Throw-Versionen der oben genannten Funktionen erstellen, indem die Ausnahmen abgefangen und ein Fehlerindikator zurückgegeben werden.

<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>

Mit diesen Methoden können Sie Zeichenfolgen effizient in Ganzzahlen konvertieren und gleichzeitig potenzielle Konvertierungsfehler behandeln.

Das obige ist der detaillierte Inhalt vonWie kann ich Konvertierungsfehler beim Konvertieren einer Zeichenfolge in eine Ganzzahl in C behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn