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

Hàm strtol () trong C ++ diễn giải nội dung của một chuỗi dưới dạng số tích phân của cơ sở được chỉ định và trả về giá trị của nó dưới dạng một số nguyên dài.

Hàm strtol () trong C ++ diễn giải nội dung của một chuỗi dưới dạng số tích phân của cơ sở được chỉ định và trả về giá trị của nó dưới dạng một số nguyên dài. Hàm này cũng đặt một con trỏ trỏ đến ký tự đầu tiên sau ký tự hợp lệ cuối cùng của chuỗi nếu có, nếu không thì con trỏ được đặt thành null.

 Đối với cơ số 10 và chuỗi "12abc": Phần số hợp lệ -> 12 Ký tự đầu tiên sau phần số hợp lệ -> a

nguyên mẫu strtol () (Theo tiêu chuẩn C ++ 11)

 long int strtol (const char * str, char ** end, int base);

Hàm strtol () nhận chuỗi, một con trỏ tới ký tự và một giá trị số nguyên - cơ sở làm tham số của nó, diễn giải nội dung của chuỗi dưới dạng số tích phân của cơ sở đã cho và trả về giá trị int dài.

Hàm này được định nghĩa trong tệp tiêu đề.

tham số strtol ()

  • str: Một chuỗi có biểu diễn của một số tích phân.
  • end:Tham chiếu đến một đối tượng đã được cấp phát kiểu char *. Giá trị của 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, trong trường hợp đó nó không được sử dụng.
  • base:Cơ sở của giá trị tích phân. Tập hợp các giá trị hợp lệ cho cơ sở là (0, 2, 3,…, 35, 36).

strtol () Giá trị trả về

Hàm strtol () trả về:

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

Ví dụ 1: Strtol () hoạt động như thế nào trong C ++?

 #include #include using namespace std; int main() ( int base = 10; char str() = "27ab_1x"; char *end; long int num; num = strtol(str, &end, base); cout << "Number in String = " << str << endl; cout << "Number in Long Int = " << num << endl; cout << "End String = " << end << endl << endl; // the pointer to invalid characters can be null strcpy(str, "27"); cout << "Number in String = " << str << endl; num = strtol(str, &end, base); cout << "Number in Long Int = " << num << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; ) 

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

 Số trong chuỗi = 27ab_1x Số trong Int dài = 27 Chuỗi cuối = ab_1x Số trong chuỗi = 27 Số trong Long Int = 27 Con trỏ rỗng

Giá trị số nguyên hợp lệ cho hàm strtol () bao gồm:

  • Dấu + hoặc - tùy chọn.
  • Tiền tố 0 cho cơ số bát phân (chỉ áp dụng khi cơ số = 8 hoặc 0).
  • Tiền tố 0x hoặc 0X cho cơ số thập lục phân (chỉ áp dụng khi cơ số = 16 hoặc 0).
  • Một dãy chữ số và / hoặc bảng chữ cái (nếu cơ số lớn hơn 10).

Các giá trị hợp lệ cho cơ sở tham số là (0, 2, 3,…, 35, 36). Tập hợp các chữ số hợp lệ cho cơ số 2 là (0, 1), cho cơ số 3 là (0, 1, 2), v.v. Đối với các cơ sở bắt đầu từ 11 đến 36, các chữ số hợp lệ bao gồm các bảng chữ cái. Tập hợp các chữ số hợp lệ cho cơ số 11 là (0, 1,…, 9, A, a), cho cơ số 12 là (0, 1,…, 9, A, a, B, b), v.v.

Lưu ý: Điều quan trọng cần nhớ là một ký tự hợp lệ cho một cơ sở có thể kết thúc trong chuỗi không hợp lệ cho một cơ sở khác như trong ví dụ dưới đây.

Ví dụ 2: Hàm strtol () với các cơ số khác nhau

 #include #include #include using namespace std; int main() ( char *end; cout << "128bz" << " to Long Int with base-5 = " << strtol("128bxz", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-12 = " << strtol("128bxz", &end, 12) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-36 = " << strtol("128bxz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )

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

 128bz đến Long Int với cơ số-5 = 7 End String = 8bxz 128bz đến Long Int với base-12 = 2123 End String = xz 128bz đến Long Int với base-36 = 64214135 End String = 

Hàm strtol () 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.

Nói chung, đối số số nguyên hợp lệ cho hàm strtol () có dạng sau:

 (khoảng trắng) (- | +) (0 | 0x) (ký tự chữ và số)

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 số nguyên hợp lệ và chuyển đổi chúng thành giá trị int dài. Bất cứ thứ gì còn lại của chuỗi sau ký tự hợp lệ cuối cùng sẽ bị bỏ qua và không ảnh hưởng đến kết quả.

Ví dụ 3: Hàm strtol () cho khoảng trắng ở đầu và chuyển đổi không hợp lệ

 #include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Long Int with base-11 = " << strtol(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; cout << " 110bcd" << " to Long Int with base-2 = " << strtol(" 110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Long Int with base-10 = " << strtol("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )

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

 25axbz đến Long Int với cơ số-11 = 307 End String = xbz 110bcd đến Long Int với base-2 = 6 End String = bcd ax110,97 đến Long Int với base-10 = 0 End String = ax110,97 

Nếu cơ số là 0, cơ số số được xác định tự động bằng cách xem định dạng của chuỗi. Nếu tiền tố là 0, cơ số là bát phân (8). Nếu tiền tố là 0x hoặc 0X, thì cơ số là thập lục phân (16), nếu không thì cơ số là thập phân (10).

Ví dụ 4: Hàm strtol () với cơ số 0

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "0128ai" << " to Long Int with base-0 = " << strtol("0128ai", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x15axzz" << " to Long Int with base-0 = " << strtol("0x15axzz", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "23dfl" << " to Long Int with base-0 = " << strtol("23dfl", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

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

0128ai đến Long Int với base-0 = 10 End String = 8ai 0x15axzz đến Long Int với base-0 = 346 End String = xzz 23dfl to Long Int với base-0 = 23 End String = dfl 

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