C ++ strtod () - C ++ standartinė biblioteka

Funkcija strtod () C ++ interpretuoja eilutės turinį kaip slankiojo kablelio skaičių ir grąžina jos vertę kaip dvigubą.

Ši funkcija taip pat nustato, kad žymeklis nukreiptų į pirmąjį simbolį po paskutinio galiojančio eilutės simbolio, jei toks yra, kitaip rodyklė nustatoma kaip nulis.

10 pagrindui ir eilutei „12abc“

Galiojanti skaitinė dalis -> 12

Pirmasis simbolis po galiojančios skaitinės dalies -> a

Tai apibrėžta antraštės faile.

strtod () prototipas

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

Funkcija strtod () nurodo eilutę ir žymeklį į simbolį kaip savo parametrą, eilutės turinį interpretuoja kaip floatskaičių ir grąžina doublevertę.

strtod () parametrai

  • str : eilutė, turinti slankiojo kablelio skaičių.
  • pabaiga : nuoroda į jau priskirtą char * tipo objektą. Pabaigos reikšmę funkcija nustato kitam simboliui eilutėje po paskutinio galiojančio simbolio. Šis parametras taip pat gali būti nulinis rodyklė, tokiu atveju jis nenaudojamas.

strtod () Grąžinimo vertė

Funkcija strtod () grąžina:

  • dviguba reikšmė (kuri konvertuojama iš eilutės).
  • 0.0, jei negalėtų būti atliktas galiojantis konversija.

Jei konvertuota vertė yra už diapazono ribų, įvyksta diapazono klaida ir grąžinama teigiama arba neigiama HUGE_VAL.

1 pavyzdys: Kaip veikia strtod () funkcija?

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

Kai paleisite programą, išvestis bus:

 Skaičius pabaigos eilutėje = ​​12.44b 0xy Skaičius dvigubai = 12.44 eilutė = b 0xy

2 pavyzdys: strtod () funkcija be simbolių

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

Kai paleisite programą, išvestis bus:

 Skaičius pabaigos eilutėje = ​​12,44b 0xy skaičius dvigubai = 12,44 Nulinis rodyklė

Galiojančią „strtod ()“ funkcijos slankiojo kablelio vertę sudaro pasirenkamas ženklas „+“ arba „-“, po kurio pateikiamas vienas iš šių rinkinių:

  • Dešimtainė slankiojo kablelio vertė :

    • Dešimtainių skaitmenų grupė (0–9), pasirinktinai turinti dešimtainį tašką (.).
      Pavyzdžiui: 13.170, -5.63 ir kt.

    • Pasirenkama eksponento dalis (e arba E), po kurios pasirenkamas ženklas „+“ arba „“ ir tuščia dešimtainių skaitmenų seka.
      Pvz .: 3.46101e + 007, 13.19e-013 ir kt.

  • Skaičiuojant šešioliktainę slankiojo kablelio vertę :

    • Eilutė, prasidedanti 0x arba 0X, po kurios tuščia šešioliktainių skaitmenų seka, pasirinktinai turinti dešimtainį tašką (.).
      Pavyzdžiui: 0xfa5, -0xb1f.24 ir kt.

    • Pasirenkama eksponento dalis (p arba P), po kurios pasirenkamas ženklas „+“ arba „“ ir tuščiadešimtainių skaitmenų tuščia seka.
      Pavyzdžiui: 0x51c.23p5, -0x2a.3p-3 ir kt.

  • Begalybė :

    • INF arba INFINITY (neatsižvelgiant į atvejį).
      Pavyzdžiui: -Inf, InfiNiTy ir kt.

  • NaN (ne skaičius) :

    • NAN arba NAN pasekmė (neatsižvelgiant į atvejį), kai seka yra simbolių seka, susidedanti tik iš raidinių ir skaitinių simbolių arba pabraukimo (_). Rezultatas - tylus NaN.
      Pavyzdžiui: Nan, NaNab1 ir kt.

3 pavyzdys: Kaip strtod () veikia su rodikliais ir šešioliktainiais?

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

Kai paleisite programą, išvestis bus:

 Skaičius eilutėje = ​​-44,01e-3Pabaigos eilutės numeris dvigubai = -0,04401 Pabaigos eilutė = pabaigos eilutės numeris eilutėje = ​​0xf1bc. 51 sveikas skaičius dvigubai = 61884.3 Pabaigos eilutė = labas

4 pavyzdys: strtod INFINITY ir NaN atvejai

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

Kai paleisite programą, išvestis bus:

 INFINITY to Double = inf pabaigos eilutė = Infabc to Double = inf pabaigos eilutė = abc NaN12a iki Double = nan pabaigos eilutė = 12a

Apskritai, „strtod ()“ funkcijos pagrįstas slankiojo kablelio argumentas yra tokios formos:

(tarpai) (- | +) (skaitmenys) (. skaitmenys) ((e | E) (- | +) skaitmenys)

Funkcija „strtod ()“ ignoruoja visus pagrindinius tarpų simbolius, kol bus rastas pagrindinis ne tarpų simbolis.

Tada, pradedant nuo šio simbolio, reikia kuo daugiau simbolių, kurie suformuoja galiojantį slankiojo kablelio vaizdą ir paverčia juos slankiojo kablelio verte. Kas lieka iš eilutės po paskutinio galiojančio simbolio, yra saugoma objekte, pažymėtame galu.

5 pavyzdys: funkcija strtod () su priekiniu tarpu

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

Kai paleisite programą, išvestis bus:

 25,5 - dviguba = 25,5 pabaigos eilutė = abc11,20 - dviguba = 0 pabaigos eilutė = abc11,20

Įdomios straipsniai...