Heim >Backend-Entwicklung >C++ >Wie kann ich Strings in C in Ganzzahlen konvertieren und gleichzeitig Konvertierungsfehler behandeln?

Wie kann ich Strings in C in Ganzzahlen konvertieren und gleichzeitig Konvertierungsfehler behandeln?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 22:49:021024Durchsuche

How Can I Convert Strings to Integers in C   While Handling Conversion Errors?

Konvertieren von Zeichenfolgen in Ganzzahlen mit booleschem Fehler in C

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!

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