C ++ wcstold () - Thư viện chuẩn C ++

Hàm wcstold () trong C ++ diễn giải nội dung của một chuỗi rộng dưới dạng số dấu phẩy động và trả về giá trị của nó dưới dạng một đôi dài.

Hàm wcstold () cũng đặt một con trỏ trỏ đến ký tự rộng đầu tiên sau ký tự hợp lệ cuối cùng của chuỗi rộng nếu có, nếu không con trỏ được đặt thành null.

Nó được định nghĩa trong tệp tiêu đề.

nguyên mẫu wcstold ()

 dài đôi wcstold (const wchar_t * str, wchar_t ** str_end);

Hàm wcstold () lấy chuỗi rộng và một con trỏ đến ký tự rộng làm tham số của nó, diễn giải nội dung của chuỗi rộng dưới dạng số dấu phẩy động và trả về giá trị kép dài.

wcstold () Tham số

  • str: Một chuỗi rộng có biểu diễn một số dấu phẩy động.
  • str_end: Con trỏ trỏ tới một ký tự rộng. Giá trị của str_end được hàm đặt thành ký tự tiếp theo trong str sau ký tự hợp lệ cuối cùng. Tham số này cũng có thể là một con trỏ null.

wcstold () Giá trị trả về

Hàm wcstold () trả về:

  • một giá trị kép dài (được chuyển đổi từ chuỗi rộng).
  • 0,0 nếu không có chuyển đổi hợp lệ nào có thể được thực hiện.

Nếu giá trị được chuyển đổi nằm ngoài phạm vi, lỗi phạm vi sẽ xảy ra và trả về HUGE_VAL dương hoặc âm .

Ví dụ 1: Hàm wcstold () hoạt động như thế nào?

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

Khi bạn chạy chương trình, đầu ra sẽ là:

 Chuỗi rộng = 93,410η ת Giá trị đôi dài = 93,41 Chuỗi cuối = η ת

Ví dụ 2: Hàm wcstold () không có ký tự ở cuối

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

Khi bạn chạy chương trình, đầu ra sẽ là:

 Chuỗi rộng = 93,410 Giá trị đôi dài = 93,41 Chuỗi cuối =

Giá trị dấu phẩy động hợp lệ cho hàm wcstold () bao gồm dấu + hoặc - tùy chọn theo sau là một trong các bộ sau:

  • Đối với giá trị dấu phẩy động thập phân :
    • Một nhóm các chữ số thập phân (0-9), tùy chọn có chứa một dấu thập phân (.). Ví dụ: 13.170, -5.63, v.v.
    • Một phần số mũ tùy chọn (e hoặc E) theo sau bởi một dấu + hoặc - tùy chọn và dãy chữ số thập phân không trống. Ví dụ: 3.46101e + 007, 13.19e-013, v.v.
  • Đối với giá trị dấu phẩy động thập lục phân :
    • Một chuỗi bắt đầu bằng 0x hoặc 0X, theo sau là một chuỗi các chữ số thập lục phân không rỗng, có tùy chọn chứa dấu thập phân (.). Ví dụ: 0xfa5, -0xb1f.24, v.v.
    • Một phần lũy thừa tùy chọn (p hoặc P) theo sau là một dấu + hoặc - tùy chọn và dãy chữ số thập lục phân không trống. Ví dụ: 0x51c.23p5, -0x2a.3p-3, v.v.
  • Vô cực :
    • INF hoặc INFINITY (bỏ qua trường hợp). Ví dụ: -Inf, InfiNiTy, v.v.
  • NaN (Không phải số) :
    • Trình tự NAN hoặc NAN (bỏ qua chữ hoa chữ thường) trong đó trình tự là một chuỗi các ký tự chỉ bao gồm các ký tự chữ và số hoặc dấu gạch dưới (_). Kết quả là NaN yên tĩnh. Ví dụ: Nan, NaNab1, v.v.

Ví dụ 3: Cách wcstold () hoạt động với số mũ và số thập lục phân?

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

Khi bạn chạy chương trình, đầu ra sẽ là:

 Chuỗi rộng = 34,901Æñ Giá trị đôi dài = 34,901 Chuỗi cuối = Æñ Chuỗi rộng = 0Xfc1.a12χr12 Giá trị đôi dài = 4033,63 Chuỗi cuối = χr12

Ví dụ 4: Các trường hợp wcstold cho INFINITY và 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; )

Khi bạn chạy chương trình, đầu ra sẽ là:

 Chuỗi rộng = inFinityxΣy Giá trị kép dài = inf Chuỗi kết thúc = xΣy Chuỗi rộng = NaN22Щ Giá trị kép dài = nan Kết thúc chuỗi = 22Щ

Nói chung, đối số dấu phẩy động hợp lệ cho hàm wcstold () có dạng sau:

 (khoảng trắng) (- | +) (chữ số) (.digits) ((e | E) (- | +) chữ số)

Hàm wcstold () bỏ qua tất cả các ký tự khoảng trắng hàng đầu cho đến khi tìm thấy ký tự không phải khoảng trắng chính.

Sau đó, bắt đầu từ ký tự này, cần nhiều ký tự nhất có thể để tạo thành biểu diễn dấu phẩy động hợp lệ và chuyển đổi chúng thành giá trị dấu phẩy động. Bất cứ thứ gì còn lại của chuỗi sau khi ký tự hợp lệ cuối cùng được lưu trữ trong đối tượng được trỏ bởi str_end.

Ví dụ 5: Hàm wcstold () với khoảng trắng ở đầu

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

Khi bạn chạy chương trình, đầu ra sẽ là:

 Chuỗi rộng = 59,013 कॵ Giá trị đôi dài = 59,013 Chuỗi cuối = कॵ

thú vị bài viết...