C ++ wcstold () - C ++ - vakiokirjasto

C ++: n wcstold () -funktio tulkitsee leveän merkkijonon sisällön liukuluvunumeroksi ja palauttaa arvon pitkäksi kaksinkertaiseksi.

Funktio wcstold () asettaa myös osoittimen osoittamaan ensimmäistä leveää merkkiä leveän merkkijonon viimeisen kelvollisen merkin jälkeen, jos sellaista on, muuten osoitin asetetaan nollaksi.

Se määritetään otsikkotiedostossa.

wcstold () -prototyyppi

 pitkä kaksinkertainen wcstold (const wchar_t * str, wchar_t ** str_end);

Wcstold () -funktio vie parametrina leveän merkkijonon ja osoittimen leveään merkkiin, tulkitsee leveän merkkijonon sisällön kelluvana numerona ja palauttaa pitkän kaksoisarvon.

wcstold () -parametrit

  • str: Leveä merkkijono, jolla on liukuluku.
  • str_end: Osoitin laajaan hahmoon. Str_end-arvon asettaa funktio seuraavalle merkille str: ssä viimeisen kelvollisen merkin jälkeen. Tämä parametri voi olla myös nollaosoitin.

wcstold () Palautusarvo

Wcstold () -funktio palauttaa:

  • pitkä kaksinkertainen arvo (joka muunnetaan leveästä merkkijonosta).
  • 0,0, jos kelvollista muunnosta ei voitu suorittaa.

Jos muunnettu arvo on alueen ulkopuolella, tapahtuu aluevirhe ja positiivinen tai negatiivinen HUGE_VAL palautetaan.

Esimerkki 1: Kuinka wcstold () -toiminto toimii?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"93.410u03b7u05ea"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Kun suoritat ohjelmaa, tulos on:

 Leveä merkkijono = 93.410η ת Pitkä kaksoisarvo = 93.41 Lopullinen merkkijono = η ת

Esimerkki 2: wcstold () -funktio ilman merkkejä

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"93.410"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Kun suoritat ohjelmaa, tulos on:

 Leveä merkkijono = 93,410 Pitkä kaksoisarvo = 93,41 Päätejono =

Wcstold () -funktion kelvollinen liukuluku koostuu valinnaisesta + tai - -merkistä, jota seuraa yksi seuraavista sarjoista:

  • Desimaalinen liukulukuarvo :
    • Ryhmä desimaalilukuja (0-9), joka sisältää mahdollisesti desimaalin (.). Esimerkiksi: 13.170, -5.63 jne.
    • Valinnainen eksponenttiosa (e tai E), jota seuraa valinnainen + tai - -merkki ja ei-tyhjä desimaalijärjestys. Esimerkiksi: 3.46101e + 007, 13.19e-013 jne.
  • Heksadesimaalinen liukuluku :
    • Merkkijono, joka alkaa 0x: lla tai 0X: llä, jota seuraa ei-tyhjä heksadesimaalilukujen sarja, joka sisältää mahdollisesti desimaalin (.). Esimerkiksi: 0xfa5, -0xb1f.24 jne.
    • Valinnainen eksponenttiosa (p tai P), jota seuraa valinnainen + tai - -merkki ja ei-tyhjä heksadesimaalilukujen sarja. Esimerkiksi: 0x51c.23p5, -0x2a.3p-3 jne.
  • Ääretön :
    • INF tai INFINITY (sivuutetaan kirjainkoko). Esimerkiksi: -Inf, InfiNiTy jne.
  • NaN (ei luku) :
    • NAN- tai NAN-sekvenssi (huomioimatta kirjainkokoa), jossa sekvenssi on merkkijono, joka koostuu vain aakkosnumeerisista merkeistä tai alaviivasta (_). Tuloksena on hiljainen NaN. Esimerkiksi: Nan, NaNab1 jne.

Esimerkki 3: Kuinka wcstold () toimii eksponenttien ja heksadesimaalien kanssa?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"34.901u00c6u00f1"; wchar_t str2() = L"0Xfc1.a12u03c7r12"; wchar_t *end; long double value; value = wcstold(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstold(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Kun suoritat ohjelmaa, tulos on:

 Leveä merkkijono = 34.901Æñ Pitkä kaksoisarvo = 34.901 Lopullinen merkkijono = Æñ Leveä merkkijono = 0Xfc1.a12χr12 Pitkä kaksoisarvo = 4033.63 Lopullinen merkkijono = χr12

Esimerkki 4: wcstold-tapaukset INFINITY ja NaN

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"inFinityxu03a3y"; wchar_t str2() = L"NaN22u0429"; wchar_t *end; long double value; value = wcstold(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstold(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Kun suoritat ohjelmaa, tulos on:

 Laaja merkkijono = inFinityxΣy Pitkä kaksoisarvo = inf Loppumerkkijono = xΣy Laaja merkkijono = NaN22Щ Pitkä kaksoisarvo = nan Loppu merkkijono = 22 =

Yleensä wcstold () -funktion kelvollinen liukuluku-argumentti on seuraavassa muodossa:

 (välilyönti) (- | +) (numeroa) (. numeroa) ((e | E) (- | +) numeroa)

Wcstold () -funktio jättää huomiotta kaikki johtavat välilyönnin merkit, kunnes ensisijainen ei-tyhjämerkki löytyy.

Tällöin tästä merkistä alkaen tarvitaan mahdollisimman monta merkkiä, jotka muodostavat kelvollisen liukuluvun ja muuntaa ne liukulukuarvoksi. Mikä merkkijonosta on jäljellä sen jälkeen, kun viimeinen kelvollinen merkki on tallennettu str_endin osoittamaan objektiin.

Esimerkki 5: wcstold () -toiminto johtavalla välilyönnillä

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L" 59.013u0915u0975"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Kun suoritat ohjelmaa, tulos on:

 Leveä merkkijono = 59.013 कॵ Pitkä kaksoisarvo = 59.013 Lopullinen merkkijono = कॵ

Mielenkiintoisia artikkeleita...