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#.
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>
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>
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>
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>
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!