Converter string em int com tratamento de erros em C
Converter uma string em um número inteiro é uma tarefa comum na programação. No entanto, pode haver casos em que o valor da string não possa ser convertido com êxito em um número inteiro. Nesses cenários, é crucial lidar com a falha de conversão normalmente.
boost::lexical_cast
Um dos métodos mais simples para converter uma string em um int com erro O tratamento é usar a função boost::lexical_cast. Esta função lança uma exceção se a conversão não puder prosseguir, permitindo-nos capturá-la e responder adequadamente.
#include
int main() {
std::string s;
std::cin >> s;
try {
int i = boost::lexical_cast(s);
} catch (...) {
// Handle the conversion failure
}
}
Usando funções de biblioteca padrão
Uma abordagem alternativa sem usar boost é utilizar as funções de biblioteca padrão, como std::stringstream e 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();
}
}
Função personalizada
Para personalização, você pode criar uma função que emula a funcionalidade de boost::lexical_cast e gerencia as falhas de conversão.
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;
}
Versões sem lançamento
Se preferir evitar o lançamento de exceções, você pode criar versões sem lançamento das funções acima, capturando as exceções e retornando uma falha indicador.
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;
}
}
Usando esses métodos, você pode converter strings em números inteiros com eficiência enquanto lida com possíveis falhas de conversão.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3