CHỈNH SỬA: sử dụng const cast là chỉ được sử dụng để chứng minh hiệu ứng của strtok()
khi áp dụng cho một con trỏ được trả về bởi chuỗi :: c_str().
Bạn không nên sử dụng strtok()
vì nó làm thay đổi chuỗi tokenized có thể dẫn đến không mong muốn, nếu không xác định, hành vi như chuỗi C "thuộc" vào instance chuỗi.
#include <string>
#include <iostream>
int main(int ac, char **av)
{
std::string theString("hello world");
std::cout << theString << " - " << theString.size() << std::endl;
//--- this cast *only* to illustrate the effect of strtok() on std::string
char *token = strtok(const_cast<char *>(theString.c_str()), " ");
std::cout << theString << " - " << theString.size() << std::endl;
return 0;
}
Sau khi cuộc gọi đến strtok()
, không gian đã được "gỡ bỏ" từ chuỗi, hoặc từ chối để một nhân vật không thể in được, nhưng chiều dài vẫn không thay đổi.
>./a.out
hello world - 11
helloworld - 11
Vì vậy, bạn phải sử dụng cơ chế gốc, sao chép chuỗi hoặc thư viện của bên thứ ba như đã đề cập trước đây.
Xem câu hỏi này: http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c/55680 – Ferruccio