C ++ strtod () - C ++ szabványos könyvtár

A strtod () függvény a C ++ nyelven egy karakterlánc tartalmát lebegőpontos számként értelmezi, és az értékét kettősként adja vissza.

Ez a függvény egy olyan mutatót is beállít, amely a karakterlánc utolsó érvényes karaktere után az első karakterre mutat, ha van ilyen, különben a mutató nullára van állítva.

A 10. alaphoz és a "12abc" karakterlánchoz

Érvényes numerikus rész -> 12

Első karakter az érvényes numerikus rész után -> a

A fejlécfájlban van meghatározva.

strtod () prototípus

 kettős strtod (const char * str, char ** end);

Az strtod () függvény a karakterláncot és a karakterre mutató mutatót veszi paraméterül, a karakterlánc tartalmát floatszámként értelmezi és doubleértéket ad vissza .

strtod () Paraméterek

  • str : Karakterlánc, amely lebegőpontos számot képvisel.
  • vége : Hivatkozás egy már lefoglalt char * típusú objektumra. A vég értékét a függvény a következő karakterre állítja be az utolsó érvényes karakter után. Ez a paraméter lehet egy null mutató is, ebben az esetben nem használják.

strtod () Visszatérési érték

Az strtod () függvény visszatér:

  • kettős érték (amelyet a karakterláncból konvertálunk).
  • 0.0, ha nem lehet érvényes konverziót végrehajtani.

Ha az átalakított érték kívül esik a tartományon, akkor tartományi hiba lép fel, és pozitív vagy negatív HUGE_VAL értéket ad vissza.

1. példa: Hogyan működik az strtod () függvény?

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

A program futtatásakor a kimenet a következő lesz:

 Szám a végső karakterláncban = 12,44b 0xy Szám kettősben = 12,44 karakterlánc = b 0xy

2. példa: strtod () függvény karakterek nélkül

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

A program futtatásakor a kimenet a következő lesz:

 Szám a végső karakterláncban = 12,44b 0xy szám kettősben = 12,44 Null mutató

Az strtod () függvény érvényes lebegőpontos értéke egy opcionális + vagy - előjelből áll, amelyet a következő halmazok valamelyike ​​követ:

  • Tízes lebegőpontos érték esetén :

    • Tizedesjegyek csoportja (0–9), amely adott esetben tartalmaz egy tizedespontot (.).
      Például: 13.170, -5.63 stb.

    • Választható kitevőrész (e vagy E), amelyet egy opcionális + vagy - jel követ, és a decimális számjegyek nem üres sorozata.
      Például: 3,46101e + 007, 13,19e-013 stb.

  • Hexadecimális lebegőpontos érték esetén :

    • 0x vagy 0X kezdetű karakterlánc, amelyet a hexadecimális számjegyek nem üres szekvenciája követ, amely adott esetben tizedespontot (.) Tartalmaz.
      Például: 0xfa5, -0xb1f.24 stb.

    • Opcionális kitevőrész (p vagy P), amelyet opcionális + vagy - jel követ, és a hexadecimális számjegyek nem üres sorozata.
      Például: 0x51c.23p5, -0x2a.3p-3 stb.

  • Végtelen :

    • INF vagy VÉGTELEN (figyelmen kívül hagyva az esetet).
      Például: -Inf, InfiNiTy stb.

  • NaN (nem szám) :

    • NAN vagy NANsequence (a kis- és nagybetűk figyelmen kívül hagyása), ahol a szekvencia csak alfanumerikus karakterekből vagy aláhúzásból (_) álló karaktersorozat. Az eredmény egy csendes NaN.
      Például: Nan, NaNab1 stb.

3. példa: Hogyan működik az strtod () hatványokkal és hexadecimálisokkal?

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

A program futtatásakor a kimenet a következő lesz:

 Szám stringben = -44.01e-3End karakterlánc száma kettősben = -0.04401 Végső karakterlánc = Végső karakterlánc száma stringben = 0xf1bc.51 helló szám kettősben = 61884.3 Vég karakterlánc = helló

4. példa: strtod esetek az INFINITY és a NaN esetében

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

A program futtatásakor a kimenet a következő lesz:

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

Általában az strtod () függvény érvényes lebegőpontos argumentuma a következő formában van:

(fehér szóköz) (- | +) (számjegy) (. számjegy) ((e | E) (- | +) számjegy)

Az strtod () függvény mindaddig figyelmen kívül hagyja az összes vezető szóköz karaktert, amíg az elsődleges nem fehér szóköz karakter megtalálható.

Ezután, ebből a karakterből kiindulva, a lehető legtöbb karakterre van szükség, amely érvényes lebegőpontos ábrázolást alkot, és lebegőpontos értékgé alakítja őket. Bármi, ami az utolsó érvényes karakter után maradt a karakterláncból, a végével jelölt objektumban tárolódik.

5. példa: strtod () függvény vezető szóközzel

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

A program futtatásakor a kimenet a következő lesz:

 25,5-től Dupla = 25,5-ig Végső karakterlánc = abc11,20-ig Dupla = 0 Végső karakterlánc = abc11,20

érdekes cikkek...