C ++ strtod () - C ++ standardna knjižnica

Funkcija strtod () u C ++-u interpretira sadržaj niza kao broj s pomičnom zarezom i vraća njegovu vrijednost kao dvostruku.

Ova funkcija također postavlja pokazivač koji pokazuje na prvi znak nakon zadnjeg važećeg znaka niza ako postoji, u suprotnom je pokazivač postavljen na nulu.

Za bazu 10 i niz "12abc"

Važeći numerički dio -> 12

Prvi znak nakon valjanog numeričkog dijela -> a

Definirano je u datoteci zaglavlja.

prototip strtod ()

 dvostruki strtod (const char * str, char ** kraj);

Funkcija strtod () uzima parametar string i pokazivač na znak, interpretira sadržaj niza kao floatbroj i vraća doublevrijednost.

strtod () Parametri

  • str : Niz koji ima broj s pokretnom zarezom.
  • kraj : referenca na već dodijeljeni objekt tipa char *. Vrijednost end funkcija postavlja na sljedeći znak u str nakon zadnjeg važećeg znaka. Ovaj parametar također može biti null pokazivač, u kojem se slučaju ne koristi.

strtod () Povratna vrijednost

Funkcija strtod () vraća:

  • dvostruka vrijednost (koja se pretvara iz niza).
  • 0.0 ako se nije mogla izvršiti valjana pretvorba.

Ako je pretvorena vrijednost izvan raspona, pojavljuje se pogreška raspona i vraća se pozitivan ili negativan HUGE_VAL.

Primjer 1: Kako funkcionira funkcija 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; ) 

Kada pokrenete program, izlaz će biti:

 Broj u završnom nizu = 12,44b 0xy Broj u dvostrukom = 12,44 niza = b 0xy

Primjer 2: funkcija strtod () bez pratećih znakova

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

Kada pokrenete program, izlaz će biti:

 Broj u završnom nizu = 12.44b 0xy Broj u dvostrukom = 12.44 Nulti pokazivač

Važeća vrijednost s pomičnom zarezom za funkciju strtod () sastoji se od izbornog znaka + ili - iza kojeg slijedi jedan od sljedećih skupova:

  • Za decimalnu vrijednost s pomičnim zarezom :

    • Skupina decimalnih znamenki (0-9), koja po izboru sadrži decimalnu točku (.).
      Na primjer: 13.170, -5,63 itd.

    • Izborni eksponentni dio (e ili E) nakon kojeg slijedi neobavezni znak + ili - i neprazan slijed decimalnih znamenki.
      Na primjer: 3,46101e + 007, 13,19e-013 itd.

  • Za heksadecimalnu vrijednost s pomičnim zarezom :

    • Niz koji započinje s 0x ili 0X, nakon čega slijedi neprazan niz heksadecimalnih znamenki, koji po izboru sadrži decimalnu točku (.).
      Na primjer: 0xfa5, -0xb1f.24 itd.

    • Izborni eksponentni dio (p ili P) nakon kojeg slijedi neobavezni znak + ili - i neprazan niz heksadecimalnih znamenki.
      Na primjer: 0x51c.23p5, -0x2a.3p-3 itd.

  • Beskonačnost :

    • INF ili INFINITY (zanemarujući slučaj).
      Na primjer: -Inf, InfiNiTy itd.

  • NaN (nije broj) :

    • NAN ili NANsljed (ignoriranje slučaja) gdje je slijed slijed znakova koji se sastoji samo od alfanumeričkih znakova ili donje crte (_). Rezultat je tihi NaN.
      Na primjer: Nan, NaNab1 itd.

Primjer 3: Kako strtod () radi s eksponentima i heksadecimalima?

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

Kada pokrenete program, izlaz će biti:

 Broj u nizu = -44.01e-3Završni broj niza u dvostrukom = -0.04401 Krajnji niz = Krajnji niz u nizu = 0xf1bc.51pozdravni broj u dvostrukom = 61884.3 Završni niz = pozdrav

Primjer 4: strtod Slučajevi za 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; ) 

Kada pokrenete program, izlaz će biti:

 INFINITY na Double = inf Krajnji niz = Infabc na Double = inf Krajnji niz = abc NaN12a na Double = nan End String = 12a

Općenito, valjani argument s pomičnim zarezom za funkciju strtod () ima sljedeći oblik:

(razmak) (- | +) (znamenke) (. znamenke) ((e | E) (- | +) znamenke)

Funkcija strtod () zanemaruje sve vodeće razmake dok se ne pronađe primarni znak koji nije razmak.

Zatim, počevši od ovog znaka, potrebno je što više znakova koji čine valjanu predstavu s pomičnom zarezom i pretvaraju ih u vrijednost s pomičnom zarezom. Sve što je ostalo od niza nakon zadnjeg važećeg znaka, pohranjuje se u objekt usmjeren krajem.

Primjer 5: funkcija strtod () s vodećim razmakom

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

Kada pokrenete program, izlaz će biti:

 25,5 na Double = 25,5 Krajnji niz = abc11,20 do Double = 0 Krajnji niz = abc11,20

Zanimljivi članci...