Maison  >  Article  >  développement back-end  >  Comment convertir en toute sécurité des chaînes en doubles en C et gérer des chaînes non numériques ?

Comment convertir en toute sécurité des chaînes en doubles en C et gérer des chaînes non numériques ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 07:28:30918parcourir

How to Safely Convert Strings to Doubles in C   and Handle Non-Numerical Strings?

Conversion de chaînes en doubles en C avec une gestion spéciale pour les chaînes non numériques

En C, la conversion de chaînes en doubles peut être effectuée de manière transparente en utilisant fonctions intégrées. Cependant, il devient crucial de faire la distinction entre les chaînes numériques et non numériques. Pour relever ce défi, nous présentons une solution qui renvoie 0 pour les chaînes non numériques.

Implémentation de la fonction :

Le cœur de notre solution réside dans la fonction string_to_double :

<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>

Comment ça marche :

  1. Nous créons un objet de flux de chaîne d'entrée (std::istringstream) i pour lire la chaîne en toute sécurité.
  2. Nous tentons d'extraire un double du flux. En cas de succès, le double est attribué à x.
  3. Si aucun double ne peut être extrait (i >> x échoue), nous renvoyons 0, indiquant une chaîne non numérique.

Test de la fonction :

Dans les cas de test fournis, nous démontrons comment la fonction interprète correctement différentes chaînes numériques et non numériques :

<code class="cpp">int main() {
  assert(0.5 == string_to_double("0.5"));
  assert(0.5 == string_to_double("0.5 "));
  assert(0.5 == string_to_double(" 0.5"));
  assert(0.5 == string_to_double("0.5a"));

  // Non-numerical strings will return 0:
  assert(0 == string_to_double("foobar"));
}</code>

Limitations :

Il est important de noter qu'en raison des exigences spécifiques de renvoi de 0 pour les chaînes non numériques, il n'est pas possible de faire la distinction entre les chaînes numériques représentant zéro et les chaînes véritablement non numériques.

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