Problem:
Das Konvertieren von Zeichenfolgen in Ganzzahlen in C stellt häufig das Problem dar Problem beim Umgang mit ungültigen Konvertierungen. Dies erhöht den Bedarf an einer effizienten Methode zur Durchführung solcher Konvertierungen mit der Möglichkeit, Fehler anzuzeigen.
Lösung: Lexical Cast von Boost
Die lexical_cast-Bibliothek von Boost bietet eine robuste Lösung für sichere String-in-Integer-Konvertierungen. Es löst eine Ausnahme aus, wenn eine ungültige Konvertierung auftritt:
<code class="cpp">#include <boost/lexical_cast.hpp> try { int i = boost::lexical_cast<int>(s); // Success handling } catch(...) { // Failure handling }</code>
Alternative ohne Boost: Standard-Streams und Ausnahmen
Wenn Boost nicht verfügbar ist, können Sie die Standardeingabe verwenden/ Ausgabestream-Operationen mit Ausnahmen:
<code class="cpp">#include <iostream> #include <sstream> #include <string> try { std::stringstream ss(s); int i; if ((ss >> i).fail() || !(ss >> std::ws).eof()) throw std::bad_cast(); // Success handling } catch(...) { // Failure handling }</code>
Lexical Cast von Boost vortäuschen (optional)
Sie können eine angepasste Version von lexical_cast erstellen, ohne Boost zu verwenden:
<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>
No-Throw-Versionen (optional)
Für No-Throw-Versionen behandeln Sie Ausnahmen innerhalb der lexical_cast-Funktion:
<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>
Das obige ist der detaillierte Inhalt vonWie kann ich Strings in C in Ganzzahlen konvertieren und gleichzeitig Konvertierungsfehler behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!