"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso lidar com erros de conversão ao converter uma string em um número inteiro em C++?

Como posso lidar com erros de conversão ao converter uma string em um número inteiro em C++?

Publicado em 15/11/2024
Navegar:713

How can I handle conversion errors when converting a string to an integer in C  ?

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.

Tutorial mais recente Mais>

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