C库中提供了strtok/wcstok来实现类似的功能,但是它们具有明显的缺点:
1. 不可重入性。这是因为它用内部的静态变量来保存相关状态。如果C库实现没有考虑TLS的话,则还有竞争条件的问题(更多信息可以参考<Windows via C/C++, Fifth Edition> Chapter 21: Thread-Local Storage)。
2. 参数必须是可写入的。
3. 参数必须是C风格字符串。
4. 总是跳过空白。
下面是一个早期字符串函数的例程(改编自Matthew Wilson《Extended STL, Volume 1》 Chapter 27 ):
#include <iostream>
using namespace std;
int main()
{
char str[] = "abc,def;ghi,jkl;;";
char* outer = NULL;
char* inner = NULL;
for( outer = strtok( str, ";") ; NULL != outer; outer = strtok(NULL, ";") )
{
printf( "Outer token: %s\n", outer );
//for( inner = strtok( outer, ","); NULL != inner; inner = strtok( NULL, ",") )
//{
// printf( "Inner token: %s\n", inner );
//}
}
return 0;
}
详情请见
http://www.cppblog.com/db123/archive/2009/05/21/83556.html