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

Funkcija strtod () v jeziku C ++ razlaga vsebino niza kot število s plavajočo vejico in vrne njegovo vrednost kot dvojno.

Ta funkcija nastavi tudi kazalec, ki kaže na prvi znak za zadnjim veljavnim znakom niza, če obstaja, sicer je kazalec nastavljen na nič.

Za osnovo 10 in niz "12abc"

Veljaven številski del -> 12

Prvi znak za veljavnim številskim delom -> a

Določen je v datoteki glave.

prototip strtod ()

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

Funkcija strtod () za parameter vzame niz in kazalec na znak, interpretira vsebino niza kot floatštevilo in vrne doublevrednost.

parametri strtod ()

  • str : niz, ki predstavlja število s plavajočo vejico.
  • konec : sklic na že dodeljeni objekt tipa char *. Vrednost end funkcija nastavi na naslednji znak v str za zadnjim veljavnim znakom. Ta parameter je lahko tudi ničelni kazalec, v tem primeru se ne uporablja.

strtod () Vrnjena vrednost

Funkcija strtod () vrne:

  • dvojna vrednost (ki se pretvori iz niza).
  • 0.0, če ni bilo mogoče izvesti nobene veljavne pretvorbe.

Če je pretvorjena vrednost zunaj obsega, pride do napake obsega in vrne se pozitiven ali negativen HUGE_VAL.

Primer 1: Kako deluje 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; ) 

Ko zaženete program, bo rezultat:

 Število v končnem nizu = 12.44b 0xy Število v dvojnem = 12.44 nizu = b 0xy

Primer 2: funkcija strtod () brez končnih 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; ) 

Ko zaženete program, bo rezultat:

 Število v končnem nizu = 12.44b 0xy Število v dvojnem = 12.44 Ničelni kazalec

Veljavna vrednost s plavajočo vejico za funkcijo strtod () je sestavljena iz neobveznega znaka + ali -, ki mu sledi eden od naslednjih nizov:

  • Za decimalno vrednost s plavajočo vejico :

    • Skupina decimalnih števk (0–9), ki neobvezno vsebuje decimalno vejico (.).
      Na primer: 13.170, -5,63 itd.

    • Izbirni eksponentni del (e ali E), ki mu sledi neobvezni znak + ali - in neprazno zaporedje decimalnih števk.
      Na primer: 3,46101e + 007, 13,19e-013 itd.

  • Za šestnajstiško vrednost s plavajočo vejico :

    • Niz, ki se začne z 0x ali 0X, čemur sledi neprazno zaporedje šestnajstiških številk, ki po izbiri vsebujejo decimalno vejico (.).
      Na primer: 0xfa5, -0xb1f.24 itd.

    • Izbirni eksponentni del (p ali P), ki mu sledi neobvezni znak + ali - in neprazno zaporedje šestnajstiških številk.
      Na primer: 0x51c.23p5, -0x2a.3p-3 itd.

  • Neskončnost :

    • INF ali INFINITY (ignoriranje velikih in malih črk).
      Na primer: -Inf, InfiNiTy itd.

  • NaN (ni številka) :

    • NAN ali NANsekvenca (prezrtje črke), kjer je zaporedje zaporedje znakov, sestavljeno samo iz alfanumeričnih znakov ali podčrtaja (_). Rezultat je tih NaN.
      Na primer: Nan, NaNab1 itd.

Primer 3: Kako strtod () deluje z eksponenti in šestnajstiškimi znaki?

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

Ko zaženete program, bo rezultat:

 Številka v nizu = -44.01e-3Končna številka niza v dvojniku = -0.04401 Končni niz = Številka končnega niza v nizu = 0xf1bc.51pozdravljena številka v dvojcu = 61884.3 Končni niz = zdravo

Primer 4: Strtod Primeri za INFINITY in 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; ) 

Ko zaženete program, bo rezultat:

 INFINITY do Double = inf Končni niz = Infabc do Double = inf Končni niz = abc NaN12a do Double = nan Končni niz = 12a

Veljaven argument s plavajočo vejico za funkcijo strtod () ima naslednjo obliko:

(presledek) (- | +) (števke) (.števke) ((e | E) (- | +) števke)

Funkcija strtod () prezre vse vodilne presledke, dokler ne najde primarnega znaka, ki ni presledek.

Nato, začenši s tem znakom, vzame čim več znakov, ki tvori veljavno predstavitev s plavajočo vejico in jih pretvori v vrednost s plavajočo vejico. Karkoli ostane od niza po zadnjem veljavnem znaku, se shrani v predmet, ki ga kaže konec.

Primer 5: funkcija strtod () z vodilnimi presledki

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

Ko zaženete program, bo rezultat:

 25,5 do Double = 25,5 Končni niz = abc11,20 do Double = 0 Končni niz = abc11,20

Zanimive Članki...