C ++ wcstold () - C ++ Standardbibliotek

Funktionen wcstold () i C ++ tolkar innehållet i en bred sträng som ett flyttalsnummer och returnerar dess värde som en lång dubbel.

Funktionen wcstold () ställer också in en pekare för att peka på det första breda tecknet efter den sista giltiga tecknet i bredsträngen om det finns någon, annars är pekaren inställd på null.

Det definieras i rubrikfilen.

wcstold () prototyp

 lång dubbel wcstold (const wchar_t * str, wchar_t ** str_end);

Funktionen wcstold () tar vidsträng och en pekare till brett tecken som parameter, tolkar innehållet i bredsträngen som ett flytande nummer och returnerar ett långt dubbelt värde.

wcstold () Parametrar

  • str: En bred sträng som representerar ett flytpunktsnummer.
  • str_end: Pekare till en pekare till ett brett tecken. Värdet på str_end ställs in av funktionen till nästa tecken i str efter det sista giltiga tecknet. Denna parameter kan också vara en nollpekare.

wcstold () Returvärde

Funktionen wcstold () returnerar:

  • ett långt dubbelvärde (som omvandlas från den breda strängen).
  • 0.0 om ingen giltig konvertering kunde utföras.

Om det konverterade värdet ligger utanför intervallet inträffar ett intervallfel och ett positivt eller negativt HUGE_VAL returneras.

Exempel 1: Hur fungerar wcstold () -funktionen?

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

När du kör programmet blir resultatet:

 Bred sträng = 93.410η ת Långt dubbelvärde = 93.41 Slutsträng = η ת

Exempel 2: funktionen wcstold () utan efterföljande tecken

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

När du kör programmet blir resultatet:

 Bred sträng = 93.410 Långt dubbelvärde = 93.41 Slutsträng =

Ett giltigt flytpunktsvärde för wcstold () -funktionen består av ett valfritt + eller - tecken följt av en av följande uppsättningar:

  • För decimalt flytande punktvärde :
    • En grupp decimalsiffror (0-9), valfritt innehållande en decimalpunkt (.). Till exempel: 13.170, -5.63, etc.
    • En valfri exponentdel (e eller E) följt av ett valfritt + eller - tecken och icke-tom sekvens av decimalsiffror. Till exempel: 3.46101e + 007, 13.19e-013, etc.
  • För hexadecimalt flytpunkt :
    • En sträng som börjar med 0x eller 0X, följt av en icke-tom sekvens av hexadecimala siffror, valfritt innehållande en decimal (.). Till exempel: 0xfa5, -0xb1f.24, etc.
    • En valfri exponentdel (p eller P) följt av ett valfritt + eller - tecken och en icke-tom sekvens av hexadecimala siffror. Till exempel: 0x51c.23p5, -0x2a.3p-3, etc.
  • Oändlighet :
    • INF eller INFINITY (ignorerar fall). Till exempel: -Inf, InfiNiTy, etc.
  • NaN (inte ett nummer) :
    • NAN- eller NAN-sekvens (ignorerar skiftläge) där sekvensen är en sekvens av tecken som endast består av alfanumeriska tecken eller understrykningen (_). Resultatet är en tyst NaN. Till exempel: Nan, NaNab1, etc.

Exempel 3: Hur fungerar wcstold () med exponenter och hexadecimaler?

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

När du kör programmet blir resultatet:

 Bred sträng = 34,901Æñ Långt dubbelvärde = 34,901 Slutsträng = Æñ Bred sträng = 0Xfc1.a12χr12 Långt dubbelvärde = 4033,63 Slutsträng = χr12

Exempel 4: wcstold-fall för INFINITY och 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; )

När du kör programmet blir resultatet:

 Bred sträng = inFinityxΣy Långt dubbelvärde = inf Slutsträng = xΣy Bred sträng = NaN22Щ Långt dubbelvärde = nan Slutsträng = 22Щ

I allmänhet har ett giltigt flyttalargument för wcstold () -funktionen följande form:

 (mellanslag) (- | +) (siffror) (. siffror) ((e | E) (- | +) siffror)

Funktionen wcstold () ignorerar alla de ledande blankstegstecknen tills det primära tecknet som inte är mellanslag hittas.

Från och med denna karaktär tar det så många tecken som möjligt som bildar en giltig flytpunktsrepresentation och konverterar dem till ett flytpunktsvärde. Oavsett vad som är kvar av strängen efter det sista giltiga tecknet lagras i det objekt som str_end pekar på.

Exempel 5: wcstold () -funktion med ledande blanksteg

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

När du kör programmet blir resultatet:

 Bred sträng = 59,013 कॵ Långt dubbelvärde = 59,013 Slutsträng = कॵ

Intressanta artiklar...