Maison > développement back-end > C++ > le corps du texte

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

Patricia Arquette
Libérer: 2024-10-26 07:28:30
original
918 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!