Heim > Backend-Entwicklung > C++ > Hauptteil

Wie konvertiere ich Strings mit Fehlerbehandlung in C in Ganzzahlen?

DDD
Freigeben: 2024-11-06 03:38:02
Original
774 Leute haben es durchsucht

How to Convert Strings to Integers with Error Handling in C  ?

Konvertieren von Strings in ganze Zahlen mit Fehlerbehandlung in C

Bei der Programmierung ist es oft notwendig, Strings in ganze Zahlen umzuwandeln. Obwohl C für diesen Zweck die Funktion std::atoi bereitstellt, werden Konvertierungsfehler nicht ordnungsgemäß behandelt. Um dieses Problem anzugehen, suchen wir nach einer Lösung, die eine Fehlerbehandlung ermöglicht, ähnlich wie Int32.TryParse von C#.

Lexical Cast-Funktion von Boost

Ein effizienter Ansatz ist die Verwendung der lexical_cast-Funktion aus der Boost-Bibliothek . Es unterstützt eine Vielzahl von Datentypen und kann eine Ausnahme auslösen, wenn die Umwandlung fehlschlägt. Hier ist ein Beispiel:

<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 error
    }
}</code>
Nach dem Login kopieren

Standardbibliotheksfunktionen verwenden

Wenn Boost nicht verfügbar ist, kann eine Kombination aus std::stringstream und >> verwendet werden. Operator kann verwendet werden:

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

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

    try {
        std::stringstream ss(s);

        int i;
        if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
            throw std::bad_cast();
        }

        // ...
    } catch (...) {
        // Handle error
    }
}</code>
Nach dem Login kopieren

Boosts Lexical Cast vortäuschen

Als letzte Alternative kann eine „gefälschte“ Version der lexical_cast-Funktion von Boost erstellt werden:

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

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

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

    try {
        int i = lexical_cast<int>(s);

        // ...
    } catch (...) {
        // Handle error
    }
}</code>
Nach dem Login kopieren

No-Throw-Versionen

Wenn eine No-Throw-Version gewünscht wird, fangen Sie die entsprechenden Ausnahmen ab und geben Sie einen booleschen Wert zurück, der Erfolg oder Misserfolg angibt:

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

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

    int i;
    if (!lexical_cast(s, i)) {
        std::cout << "Bad cast." << std::endl;
    }
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie konvertiere ich Strings mit Fehlerbehandlung in C in Ganzzahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!