C ++ wcstold () - C ++ biblioteka standardowa

Funkcja wcstold () w C ++ interpretuje zawartość szerokiego łańcucha jako liczbę zmiennoprzecinkową i zwraca jej wartość jako długi double.

Funkcja wcstold () ustawia także wskaźnik wskazujący pierwszy szeroki znak po ostatnim prawidłowym znaku szerokiego ciągu, jeśli taki istnieje, w przeciwnym razie wskaźnik jest ustawiany na null.

Jest zdefiniowany w pliku nagłówkowym.

prototyp wcstold ()

 long double wcstold (const wchar_t * str, wchar_t ** str_end);

Funkcja wcstold () przyjmuje jako parametr szeroki łańcuch i wskaźnik do szerokiego znaku, interpretuje zawartość szerokiego ciągu jako liczbę zmiennoprzecinkową i zwraca wartość typu long double.

wcstold () Parametry

  • str: Szeroki łańcuch mający reprezentację liczby zmiennoprzecinkowej.
  • str_end: wskaźnik do wskaźnika do szerokiego znaku. Wartość str_end jest ustawiana przez funkcję na następny znak w str po ostatnim prawidłowym znaku. Ten parametr może być również wskaźnikiem zerowym.

wcstold () Zwracana wartość

Funkcja wcstold () zwraca:

  • długa podwójna wartość (która jest konwertowana z szerokiego ciągu).
  • 0.0, jeśli nie można przeprowadzić żadnej prawidłowej konwersji.

Jeśli przekonwertowana wartość jest poza zakresem, występuje błąd zakresu i zwracany jest dodatni lub ujemny HUGE_VAL .

Przykład 1: Jak działa funkcja wcstold ()?

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

Po uruchomieniu programu wynik będzie następujący:

 Szeroki ciąg = 93,410η ת Długa wartość podwójna = 93,41 Ciąg końcowy = η ת

Przykład 2: funkcja wcstold () bez znaków końcowych

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

Po uruchomieniu programu wynik będzie następujący:

 Szeroki ciąg = 93,410 wartość Long Double = 93,41 Ciąg końcowy =

Prawidłowa wartość zmiennoprzecinkowa funkcji wcstold () składa się z opcjonalnego znaku + lub -, po którym następuje jeden z następujących zestawów:

  • Dla dziesiętnej wartości zmiennoprzecinkowej :
    • Grupa cyfr dziesiętnych (0–9), opcjonalnie zawierająca kropkę dziesiętną (.). Na przykład: 13,170, -5,63 itd.
    • Opcjonalna część wykładnika (e lub E), po której następuje opcjonalny znak + lub - oraz niepusta sekwencja cyfr dziesiętnych. Na przykład: 3.46101e + 007, 13.19e-013 itd.
  • Dla szesnastkowej wartości zmiennoprzecinkowej :
    • Ciąg zaczynający się od 0x lub 0X, po którym następuje niepusta sekwencja cyfr szesnastkowych, opcjonalnie zawierająca kropkę dziesiętną (.). Na przykład: 0xfa5, -0xb1f.24 itd.
    • Opcjonalna część wykładnika (p lub P), po której następuje opcjonalny znak + lub - oraz niepusta sekwencja cyfr szesnastkowych. Na przykład: 0x51c.23p5, -0x2a.3p-3 itd.
  • Nieskończoność :
    • INF lub INFINITY (ignorując wielkość liter). Na przykład: -Inf, InfiNiTy itp.
  • NaN (nie liczba) :
    • Sekwencja NAN lub NAN (pomijając wielkość liter), gdzie sekwencja to sekwencja znaków składająca się wyłącznie ze znaków alfanumerycznych lub podkreślenia (_). Wynikiem jest cichy NaN. Na przykład: Nan, NaNab1 itp.

Przykład 3: Jak wcstold () działa z wykładnikami i liczbami szesnastkowymi?

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

Po uruchomieniu programu wynik będzie następujący:

 Szeroki ciąg = 34.901Æñ Wartość Long Double = 34.901 Ciąg końcowy = Æñ Szeroki ciąg = 0Xfc1.a12χr12 Wartość Long Double = 4033,63 Ciąg końcowy = χr12

Przykład 4: przypadki wcstold dla INFINITY i 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; )

Po uruchomieniu programu wynik będzie następujący:

 Wide String = inFinityxΣy Long Double wartość = inf End String = xΣy Wide String = NaN22Щ Long Double wartość = nan End String = 22Щ

Ogólnie poprawny argument zmiennoprzecinkowy funkcji wcstold () ma następującą postać:

 (białe znaki) (- | +) (cyfry) (.digits) ((e | E) (- | +) cyfry)

Funkcja wcstold () ignoruje wszystkie początkowe białe znaki, dopóki nie zostanie znaleziony główny znak niebędący białymi znakami.

Następnie, zaczynając od tego znaku, przyjmuje jak najwięcej znaków, które tworzą prawidłową reprezentację zmiennoprzecinkową i konwertują je na wartość zmiennoprzecinkową. Cokolwiek pozostało z ciągu po ostatnim prawidłowym znaku, jest przechowywane w obiekcie wskazywanym przez str_end.

Przykład 5: funkcja wcstold () z wiodącymi białymi znakami

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

Po uruchomieniu programu wynik będzie następujący:

 Szeroki ciąg = 59,013 lub wartość Long Double = 59,013 Ciąg końcowy = कॵ

Interesujące artykuły...