C ++ strtod () - Biblioteca standard C ++

Funcția strtod () din C ++ interpretează conținutul unui șir ca un număr în virgulă mobilă și îi returnează valoarea ca un dublu.

Această funcție setează, de asemenea, un indicator pentru a indica primul caracter după ultimul caracter valid al șirului, dacă există, în caz contrar, indicatorul este setat la nul.

Pentru baza 10 și șirul „12abc”

Partea numerică validă -> 12

Primul caracter după partea numerică validă -> a

Este definit în fișierul antet.

strtod () prototip

 strtod dublu (const char * str, char ** end);

Funcția strtod () ia șir și un pointer la caracter ca parametru, interpretează conținutul șirului ca un floatnumăr și returnează o doublevaloare.

strtod () Parametri

  • str : Un șir care are reprezentarea unui număr în virgulă mobilă.
  • final : Referință la un obiect deja alocat de tipul char *. Valoarea de sfârșit este setată de funcție la următorul caracter din str după ultimul caracter valid. Acest parametru poate fi, de asemenea, un pointer nul, caz în care nu este utilizat.

strtod () Valoare returnată

Funcția strtod () returnează:

  • o valoare dublă (care este convertită din șir).
  • 0,0 dacă nu s-a putut efectua o conversie validă.

Dacă valoarea convertită este în afara intervalului, apare o eroare de interval și se returnează un HUGE_VAL pozitiv sau negativ.

Exemplul 1: Cum funcționează funcția strtod ()?

 #include #include using namespace std; int main() ( char numberString() = "12.44b 0xy"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Când rulați programul, ieșirea va fi:

 Număr în șir final = 12.44b 0xy Număr în dublu = 12.44 Șir = b 0xy

Exemplul 2: funcția strtod () fără caractere finale

 #include #include using namespace std; int main() ( char numberString() = "12.44"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; // If end is not Null if (*end) ( cout << end; ) // If end is Null else ( cout << "Null pointer"; ) return 0; ) 

Când rulați programul, ieșirea va fi:

 Număr în șir de încheiere = 12.44b 0xy Număr în dublu = 12.44 Pointer nul

O valoare validă în virgulă mobilă pentru funcția strtod () constă dintr-un semn opțional + sau - urmat de unul dintre următoarele seturi:

  • Pentru valoarea zecimală în virgulă mobilă :

    • Un grup de cifre zecimale (0-9), care conține opțional un punct zecimal (.).
      De exemplu: 13.170, -5.63 etc.

    • O parte opțională a exponentului (e sau E) urmată de un semn opțional + sau - și o secvență ne-goală de cifre zecimale.
      De exemplu: 3.46101e + 007, 13.19e-013 etc.

  • Pentru valoarea hexadecimală în virgulă mobilă :

    • Un șir care începe cu 0x sau 0X, urmat de o secvență non-goală de cifre hexazecimale, care conține opțional un punct zecimal (.).
      De exemplu: 0xfa5, -0xb1f.24 etc.

    • O parte a exponentului opțional (p sau P) urmată de un semn opțional + sau - și o secvență non-goală de cifre hexazecimale.
      De exemplu: 0x51c.23p5, -0x2a.3p-3 etc.

  • Infinit :

    • INF sau INFINITY (ignorând cazul).
      De exemplu: -Inf, InfiNiTy etc.

  • NaN (nu este un număr) :

    • NAN sau NANsequence (ignorând caz) unde secvența este o secvență de caractere constând numai din caractere alfanumerice sau sublinierea (_). Rezultatul este un NaN liniștit.
      De exemplu: Nan, NaNab1 etc.

Exemplul 3: Cum funcționează strtod () cu exponenți și hexadecimali?

 #include #include #include using namespace std; int main() ( // initialize a exponential value char numberString() = "-44.01e-3End String"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl << endl; // initialize a new hexadecimal value strcpy(numberString,"0xf1bc.51hello"); number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Când rulați programul, ieșirea va fi:

 Număr în șir = -44.01e-3 Număr șir final în dublu = -0.04401 Șir final = Număr șir final în șir = 0xf1bc.51hello Număr în dublu = 61884.3 Șir final = hello

Exemplul 4: Cazuri strtod pentru INFINITY și NaN

 #include #include using namespace std; int main() ( char *end; cout << "INFINITY" << " to Double = " << strtod("INFINITY", &end) << endl; cout << "End String = " << end << endl << endl; cout << "Infabc" << " to Double = " << strtod("Infabc", &end) << endl; cout << "End String = " << end << endl << endl; cout << "NaN12a" << " to Double = " << strtod("NaN12a", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Când rulați programul, ieșirea va fi:

 INFINITY to Double = inf End String = Infabc to Double = inf End String = abc NaN12a to Double = nan End String = 12a

În general, un argument valid în virgulă mobilă pentru funcția strtod () are următoarea formă:

(spațiu alb) (- | +) (cifre) (.cifre) ((e | E) (- | +) cifre)

Funcția strtod () ignoră toate caracterele de spațiu alb principal până când se găsește caracterul principal non-spațiu alb.

Apoi, începând de la acest caracter, este nevoie de cât mai multe caractere care formează o reprezentare validă în virgulă mobilă și le convertește într-o valoare în virgulă mobilă. Orice a rămas din șir după ultimul caracter valid este stocat în obiectul indicat de sfârșit.

Exemplul 5: funcția strtod () cu spațiul alb principal

 #include #include using namespace std; int main() ( char *end; cout << "25.5" << " to Double = " << strtod(" 25.5", &end) << endl; // end pointer is set to null cout << "End String = " << end << endl << endl; // Returns 0 because of invalid conversion cout << "abc11.20" << " to Double = " << strtod("abc11.20", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Când rulați programul, ieșirea va fi:

 25,5 până la Dublu = 25,5 End String = abc11.20 până la Double = 0 End String = abc11.20

Articole interesante...