c — Làm thế nào để strtok () phân tách chuỗi thành mã thông báo trong C?

hàm thời gian chạy strtok hoạt động như thế này

lần đầu tiên bạn gọi strtok, bạn cung cấp một chuỗi mà bạn muốn mã hóa

char s[] = "this is a string";

trong không gian chuỗi ở trên dường như là một dấu phân cách tốt giữa các từ, vì vậy hãy sử dụng:

char* p = strtok(s, " ");

điều xảy ra bây giờ là ‘s’ được tìm kiếm cho đến khi tìm thấy ký tự khoảng trắng, mã thông báo đầu tiên được trả về (‘this’) và p trỏ tới mã thông báo đó (chuỗi)

để nhận mã thông báo tiếp theo và tiếp tục với cùng một chuỗi, NULL được truyền dưới dạng đối số vì strtok duy trì một con trỏ tĩnh cho chuỗi đã truyền trước đó của bạn:

p = strtok(NULL," ");

p bây giờ chỉ đến ‘là’

và cứ như vậy cho đến khi không còn khoảng trống nào có thể tìm thấy, thì chuỗi cuối cùng được trả về dưới dạng ‘chuỗi’ mã thông báo cuối cùng.

thuận tiện hơn bạn có thể viết nó như thế này thay vì in ra tất cả các mã thông báo:

for (char *p = strtok(s," "); p != NULL; p = strtok(NULL, " "))
{
  puts(p);
}

CHỈNH SỬA:

Nếu bạn muốn lưu trữ các giá trị được trả về từ strtok, bạn cần sao chép mã thông báo sang bộ đệm khác, ví dụ: strdup(p); vì chuỗi gốc (được trỏ bởi con trỏ tĩnh bên trong strtok) được sửa đổi giữa các lần lặp để trả về mã thông báo.