C ++ strtod () - C ++ standardraamatukogu

Funktsioon strtod () C ++ keeles tõlgendab stringi sisu ujukomaarvuna ja tagastab selle väärtuse topeltena.

See funktsioon paneb ka kursori näitama stringi viimase kehtiva märgi järel oleva esimese märgi poole, kui see on olemas, vastasel juhul on kursor null.

Aluse 10 ja stringi "12abc" jaoks

Kehtiv arvuline osa -> 12

Esimene märk pärast kehtivat arvulist osa -> a

See on määratletud päisefailis.

strtod () prototüüp

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

Funktsioon strtod () võtab parameetriks stringi ja kursori tähemärgi juurde, tõlgendab stringi sisu floatarvuna ja tagastab doubleväärtuse.

strtod () parameetrid

  • str : string, millel on ujukoma number.
  • lõpp : viide juba omistatud objektile, mille tüüp on char *. Lõppväärtuse määrab funktsioon järgmisele märgile stringides pärast viimast kehtivat tähemärki. See parameeter võib olla ka nullkursor, sel juhul seda ei kasutata.

strtod () Tagastusväärtus

Funktsioon strtod () tagastab:

  • topeltväärtus (mis teisendatakse stringist).
  • 0,0, kui kehtivat teisendamist ei õnnestunud teha.

Kui teisendatud väärtus jääb vahemikust välja, tekib vahemikuviga ja tagastatakse positiivne või negatiivne HUGE_VAL.

Näide 1: Kuidas funktsioon strtod () töötab?

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

Programmi käivitamisel on väljund järgmine:

 Lõppstringi number = 12,44b 0xy Arv topelt = 12,44 string = b0xy

Näide 2: funktsioon strtod () ilma tähemärkideta

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

Programmi käivitamisel on väljund järgmine:

 Number lõpus stringis = 12,44b 0xy number kahekordses = 12,44 Nullkursor

Funktsiooni strtod () kehtiv ujukoma väärtus koosneb valikulisest märgist + või -, millele järgneb üks järgmistest komplektidest:

  • Ujukoma kümnendkoha väärtuse korral :

    • Kümnendkohtade rühm (0–9), mis sisaldab valikuliselt komakohta (.).
      Näiteks: 13.170, -5.63 jne.

    • Valikuline eksponentosa (e või E), millele järgneb valikuline märk + või - ja kümnendkohtade tühi jada.
      Näiteks: 3.46101e + 007, 13.19e-013 jne.

  • Kuueteistkümnendkohalise ujukoma väärtus :

    • String, mis algab 0x või 0X, millele järgneb kuueteistkümnendkohaliste arvude tühi jada, mis sisaldab valikuliselt kümnendkohta (.).
      Näiteks: 0xfa5, -0xb1f.24 jne.

    • Valikuline eksponentosa (p või P), millele järgneb valikuline märk + või - ja kuueteistkümnendkohaliste numbrite tühi jada.
      Näiteks: 0x51c.23p5, -0x2a.3p-3 jne.

  • Lõpmatus :

    • INF või INFINITY (ignoreerides juhtumit).
      Näiteks: -Inf, InfiNiTy jne.

  • NaN (mitte arv) :

    • NAN või NAN tagajärg (ignoreerides juhtumit), kus järjestus on tähtede jada, mis koosneb ainult tähtnumbrilistest tähtedest või alakriipsust (_). Tulemuseks on vaikne NaN.
      Näiteks: Nan, NaNab1 jne.

Näide 3: Kuidas strtod () töötab eksponentide ja kuueteistkümnendkohtadega?

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

Programmi käivitamisel on väljund järgmine:

 Number stringis = -44,01e-3End stringide arv kahekordses = -0,04401 Lõppstring = Stringi lõpunumber stringis = 0xf1bc.51hello number kahekordses = 61884,3 Lõppstring = tere

Näide 4: strtod juhtumid lõpmatuse ja NaN jaoks

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

Programmi käivitamisel on väljund järgmine:

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

Üldiselt on funktsiooni strtod () kehtiv ujukomaargument järgmine vorm:

(tühik) (- | +) (numbrit) (. numbrit) ((e | E) (- | +) numbrit)

Funktsioon strtod () ignoreerib kõiki juhtivaid tühimärke, kuni leitakse esmane mitte-tühimärk.

Seejärel, alates sellest märgist, võtab see võimalikult palju märke, mis moodustavad kehtiva ujukoma kujutise ja teisendavad need ujukoma väärtuseks. Kõik, mis jääb stringist järele pärast seda, kui viimane kehtiv tähemärk on otsa salvestatud objektile salvestatud.

Näide 5: funktsioon strtod () juhtiva tühimikuga

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

Programmi käivitamisel on väljund järgmine:

 25,5 kuni topelt = 25,5 lõpu string = abc11,20 kuni topelt = 0 lõpu string = abc11,20

Huvitavad Artiklid...