Convertir une chaîne en entier avec la gestion des erreurs en C
La conversion d'une chaîne en entier est une tâche courante en programmation. Cependant, il peut arriver que la valeur de chaîne ne puisse pas être convertie en nombre entier. Dans de tels scénarios, il est crucial de gérer l'échec de la conversion avec élégance.
boost::lexical_cast
L'une des méthodes les plus simples pour convertir une chaîne en un entier avec une erreur la manipulation consiste à utiliser la fonction boost::lexical_cast. Cette fonction lève une exception si la conversion ne peut pas avoir lieu, nous permettant de l'intercepter et de répondre de manière appropriée.
#include
int main() {
std::string s;
std::cin >> s;
try {
int i = boost::lexical_cast(s);
} catch (...) {
// Handle the conversion failure
}
}
Utilisation des fonctions de bibliothèque standard
Une approche alternative sans utiliser boost consiste à utiliser les fonctions de bibliothèque standard telles que std::stringstream et std::bad_cast.
#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();
}
}
Fonction personnalisée
Pour la personnalisation, vous pouvez créer une fonction qui émule la fonctionnalité de boost::lexical_cast et gère les échecs de conversion.
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;
}
Versions sans lancement
Si vous préférez éviter de lancer des exceptions, vous pouvez créer des versions sans lancement des fonctions ci-dessus en interceptant les exceptions et en renvoyant un échec indicateur.
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;
}
}
En utilisant ces méthodes, vous pouvez convertir efficacement des chaînes en entiers tout en gérant les échecs de conversion potentiels.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3