Konvertieren Sie einen String mit Fehlerbehandlung in C in einen Ganzzahlwert.
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 einer Zeichenfolge 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 entsprechend reagieren können.
#include
int main() {
std::string s;
std::cin >> s;
try {
int i = boost::lexical_cast(s);
} catch (...) {
// Handle the conversion failure
}
}
Verwenden von Standardbibliotheksfunktionen
Ein alternativer Ansatz ohne Boost besteht darin, die Standardbibliotheksfunktionen wie std::stringstream und std::bad_cast zu verwenden.
#include
#include
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();
}
}
Benutzerdefinierte Funktion
Zur Anpassbarkeit können Sie eine Funktion erstellen, die die Funktionalität von boost::lexical_cast emuliert und die Konvertierungsfehler verwaltet.
template
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;
}
Nicht-auslösende Versionen
Wenn Sie das Auslösen von Ausnahmen lieber vermeiden möchten, können Sie nicht-auslösende Versionen der oben genannten Funktionen erstellen, indem Sie die Ausnahmen abfangen und einen Fehler zurückgeben Indikator.
template
bool lexical_cast(const std::string& s, T& t) {
try {
t = lexical_cast(s);
return true;
} catch (const std::bad_cast& e) {
return false;
}
}
Mit diesen Methoden können Sie Zeichenfolgen effizient in Ganzzahlen konvertieren und gleichzeitig potenzielle Konvertierungsfehler beheben.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3