C ++ strtod () - štandardná knižnica C ++

Funkcia strtod () v C ++ interpretuje obsah reťazca ako číslo s pohyblivou rádovou čiarkou a vráti jeho hodnotu ako dvojnásobok.

Táto funkcia tiež nastaví ukazovateľ tak, aby ukazoval na prvý znak za posledným platným znakom reťazca, ak existuje, inak je ukazovateľ nastavený na hodnotu null.

Pre základňu 10 a reťazec „12abc“

Platná číselná časť -> 12

Prvý znak za platnou číselnou časťou -> a

Je definované v hlavičkovom súbore.

strtod () prototyp

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

Funkcia strtod () vezme za svoj parameter reťazec a ukazovateľ, ktorý interpretuje obsah reťazca ako floatčíslo a vráti doublehodnotu.

parametre strtod ()

  • str : Reťazec, ktorý má reprezentáciu čísla s pohyblivou rádovou čiarkou.
  • koniec : Odkaz na už pridelený objekt typu char *. Hodnota end je nastavená funkciou na nasledujúci znak v str za posledným platným znakom. Týmto parametrom môže byť tiež nulový ukazovateľ, v takom prípade sa nepoužije.

strtod () Vrátená hodnota

Funkcia strtod () vráti:

  • dvojnásobná hodnota (ktorá sa prevedie z reťazca).
  • 0,0, ak nebolo možné vykonať platný prevod.

Ak je prevedená hodnota mimo rozsah, dôjde k chybe rozsahu a vráti sa kladný alebo záporný HUGE_VAL.

Príklad 1: Ako funguje funkcia 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; ) 

Po spustení programu bude výstup:

 Číslo v koncovom reťazci = 12,44b 0xy Číslo v dvojnásobku = 12,44 reťazec = b 0xy

Príklad 2: funkcia strtod () bez koncových znakov

 #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; ) 

Po spustení programu bude výstup:

 Číslo v koncovom reťazci = 12,44b 0xy číslo v dvojnásobku = 12,44 Nulový ukazovateľ

Platná hodnota s pohyblivou rádovou čiarkou pre funkciu strtod () pozostáva z voliteľného znamienka + alebo -, za ktorým nasleduje jedna z nasledujúcich množín:

  • Pre desatinnú hodnotu s pohyblivou desatinnou čiarkou :

    • Skupina desatinných číslic (0-9), voliteľne obsahujúca desatinnú čiarku (.).
      Napríklad: 13,170, -5,63 atď.

    • Voliteľná exponentová časť (e alebo E), za ktorou nasleduje voliteľný znak + alebo - a neprázdna postupnosť desatinných číslic.
      Napríklad: 3,46101e + 007, 13,19e-013 atď.

  • Pre hexadecimálnu hodnotu s pohyblivou rádovou čiarkou :

    • Reťazec začínajúci na 0x alebo 0X, za ktorým nasleduje neprázdna sekvencia hexadecimálnych číslic, voliteľne obsahujúca desatinnú čiarku (.).
      Napríklad: 0xfa5, -0xb1f.24 atď.

    • Voliteľná exponentová časť (p alebo P), za ktorou nasleduje voliteľný znak + alebo - a neprázdna sekvencia hexadecimálnych číslic.
      Napríklad: 0x51c.23p5, -0x2a.3p-3 atď.

  • Nekonečno :

    • INF alebo INFINITY (ignorovanie malých a veľkých písmen).
      Napríklad: -Inf, InfiNiTy atď.

  • NaN (nie číslo) :

    • NAN alebo NANsequence (ignorovanie malých a veľkých písmen), kde sekvencia je sekvencia znakov pozostávajúca iba z alfanumerických znakov alebo podčiarkovníka (_). Výsledkom je pokojný NaN.
      Napríklad: Nan, NaNab1 atď.

Príklad 3: Ako strtod () pracuje s exponentmi a hexadecimálnymi číslami?

 #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; ) 

Po spustení programu bude výstup:

 Number in String = -44.01e-3End String Number in Double = -0.04401 End String = End String Number in String = 0xf1bc.51hello Number in Double = 61884.3 End String = ahoj

Príklad 4: strtod Prípady INFINITY a 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; ) 

Po spustení programu bude výstup:

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

Platný argument s pohyblivou rádovou čiarkou pre funkciu strtod () má vo všeobecnosti nasledujúcu formu:

(biele medzery) (- | +) (číslice) (. číslice) ((e | E) (- | +) číslice)

Funkcia strtod () ignoruje všetky vedúce medzery, kým sa nenájde primárny znak bez medzier.

Potom, počnúc týmto znakom, trvá čo najviac znakov, ktoré vytvoria platné vyjadrenie s pohyblivou rádovou čiarkou a prevedú ich na hodnotu s pohyblivou desatinnou čiarkou. Všetko, čo po reťazci zostáva po poslednom platnom znaku, je uložené v objekte, na ktorý ukazuje koniec.

Príklad 5: funkcia strtod () s úvodnými bielymi znakmi

 #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; ) 

Po spustení programu bude výstup:

 25,5 až dvojnásobok = 25,5 koncový reťazec = abc11,20 až dvojnásobok = 0 koncový reťazec = abc11,20

Zaujímavé články...