C ++ wcstold () - Стандартная библиотека C ++

Функция wcstold () в C ++ интерпретирует содержимое широкой строки как число с плавающей запятой и возвращает его значение как длинное двойное число.

Функция wcstold () также устанавливает указатель так, чтобы он указывал на первый широкий символ после последнего действительного символа широкой строки, если таковой имеется, в противном случае указатель устанавливается в нуль.

Это определено в заголовочном файле.

wcstold () прототип

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

Функция wcstold () принимает в качестве параметра широкую строку и указатель на широкий символ, интерпретирует содержимое широкой строки как число с плавающей запятой и возвращает длинное двойное значение.

Параметры wcstold ()

  • str: широкая строка, представляющая число с плавающей запятой.
  • str_end: указатель на указатель на широкий символ. Значение str_end устанавливается функцией на следующий символ в str после последнего допустимого символа. Этот параметр также может быть нулевым указателем.

wcstold () Возвращаемое значение

Функция wcstold () возвращает:

  • длинное двойное значение (которое преобразуется из широкой строки).
  • 0.0, если не удалось выполнить действительное преобразование.

Если преобразованное значение выходит за пределы диапазона, возникает ошибка диапазона и возвращается положительное или отрицательное значение HUGE_VAL .

Пример 1: Как работает функция 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; )

Когда вы запустите программу, вывод будет:

 Широкая строка = 93,410η ת Длинная двойная величина = 93,41 Конечная строка = η ת

Пример 2: функция wcstold () без завершающих символов

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

Когда вы запустите программу, вывод будет:

 Широкая строка = 93,410 Длинная двойная величина = 93,41 Конечная строка =

Допустимое значение с плавающей запятой для функции wcstold () состоит из необязательного знака + или -, за которым следует один из следующих наборов:

  • Для десятичных значений с плавающей запятой :
    • Группа десятичных цифр (0–9), необязательно содержащая десятичную точку (.). Например: 13,170, -5,63 и т. Д.
    • Необязательная часть экспоненты (e или E), за которой следует необязательный знак + или - и непустая последовательность десятичных цифр. Например: 3.46101e + 007, 13.19e-013 и т. Д.
  • Для шестнадцатеричного значения с плавающей запятой :
    • Строка, начинающаяся с 0x или 0X, за которой следует непустая последовательность шестнадцатеричных цифр, необязательно содержащая десятичную точку (.). Например: 0xfa5, -0xb1f.24 и т. Д.
    • Необязательная часть экспоненты (p или P), за которой следует необязательный знак + или - и непустая последовательность шестнадцатеричных цифр. Например: 0x51c.23p5, -0x2a.3p-3 и т. Д.
  • Бесконечность :
    • INF или INFINITY (без учета регистра). Например: -Inf, InfiNiTy и т. Д.
  • NaN (не число) :
    • NAN или последовательность NAN (без учета регистра), где последовательность - это последовательность символов, состоящая только из буквенно-цифровых символов или символа подчеркивания (_). Результатом является тихий NaN. Например: Nan, NaNab1 и т. Д.

Пример 3: Как wcstold () работает с экспонентами и шестнадцатеричными числами?

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

Когда вы запустите программу, вывод будет:

 Широкая строка = 34.901Æñ Длинное двойное значение = 34.901 Конечная строка = ñ Широкая строка = 0Xfc1.a12χr12 Длинное двойное значение = 4033.63 Конечная строка = χr12

Пример 4: случаи wcstold для INFINITY и 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; )

Когда вы запустите программу, вывод будет:

 Широкая строка = inFinityxΣy Long Double value = inf End String = xΣy Wide String = NaN22Щ Long Double value = nan End String = 22Щ

В общем, допустимый аргумент с плавающей запятой для функции wcstold () имеет следующую форму:

 (пробел) (- | +) (цифры) (. цифры) ((e | E) (- | +) цифры)

Функция wcstold () игнорирует все ведущие пробельные символы, пока не будет найден основной непробельный символ.

Затем, начиная с этого символа, требуется как можно больше символов, которые формируют допустимое представление с плавающей запятой и преобразуют их в значение с плавающей запятой. Все, что осталось от строки после последнего допустимого символа, сохраняется в объекте, на который указывает str_end.

Пример 5: функция wcstold () с ведущими пробелами

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

Когда вы запустите программу, вывод будет:

 Широкая строка = 59,013 कॵ Длинное двойное значение = 59,013 Конечная строка = कॵ

Интересные статьи...