Maison  >  Article  >  développement back-end  >  Comment puis-je convertir des chaînes en valeurs doubles en C tout en gérant des entrées non numériques ?

Comment puis-je convertir des chaînes en valeurs doubles en C tout en gérant des entrées non numériques ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 08:07:29859parcourir

How Can I Convert Strings to Double Values in C   while Handling Non-Numerical Inputs?

Conversion de chaînes en valeurs doubles en C

Énoncé du problème :

Convertir une représentation sous forme de chaîne d'un nombre en une valeur double à virgule flottante. Si la chaîne n'est pas numérique, renvoyez 0.

Solution :

Pour convertir une chaîne en valeur double en C , vous pouvez utiliser la fonction std::stod , qui prend un paramètre de chaîne et le convertit en double. Cependant, cette fonction ne renvoie pas 0 pour les chaînes non numériques.

Fonction personnalisée pour la gestion non numérique :

Pour résoudre ce problème, nous pouvons créer une fonction personnalisée qui renvoie 0 pour les chaînes non numériques. Voici une implémentation :

<code class="cpp">#include <sstream>

double string_to_double(const std::string& s) {
  std::istringstream i(s);
  double x;
  if (!(i >> x)) {
    return 0;
  }
  return x;
}</code>

Cette fonction utilise std::istringstream pour extraire la valeur double de la chaîne. Si l'extraction échoue, elle renvoie 0.

Exemples d'utilisation :

Voici quelques exemples d'utilisation de la fonction string_to_double :

<code class="cpp">assert(0.5 == string_to_double("0.5"));
assert(0.5 == string_to_double("0.5 "));
assert(0.5 == string_to_double("0.5a"));
assert(0 == string_to_double("foobar"));</code>

Remarque concernant les zéros non numériques :

Il est important de noter que cette fonction ne peut pas distinguer toutes les chaînes non numériques des zéros. Par exemple, les chaînes suivantes sont toutes considérées comme des zéros selon cette implémentation :

  • "0"
  • "0."
  • "0.0"
  • "0"
  • "-0"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn