70,029
社区成员




//官方的strtok函数,用来通过分隔字符(不支持字符串,传入的串中每个字符单独当分隔符,如下例子组合的如123会处理1而23会被跳过),返回分隔的串的首地址
//比如调用strtok("abc123def","123456");
//返回值是指向abc的指针
//下次要获得"def",需要调用strtok(NULL,"123456");函数用了一个全局变量_TOKEN来存储上次解析到的位置
/*
这里的方法比较巧,用一个32的byte数组中的每一位表示ascii字符表中的255个字符是否存在,
用的是位移的方法,关键就是这句,map[*ctrl >> 3] |= (1 << (*ctrl & 7));
*ctrl >> 3:用字符的前5位来当索引,将255个字符分为32组
1 << (*ctrl & 7):用后三位的值来当每一组的索引,表明自己是哪一位,比如:后三位是010=2,说明是第二位
|=:最后来个或操作,将那一位置为1
*/
/*
要判断字符是不是存在在索引中也就简单了,
map[*str >> 3] & (1 << (*str & 7))
值为1说明这个字符是存在的
*/
// crt_strtok.c
// compile with: /W1
// In this program, a loop uses strtok
// to print all the tokens (separated by commas
// or blanks) in the string named "string".
//
#include <string.h>
#include <stdio.h>
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;
int main( void )
{
printf( "Tokens:\n" );
// Establish string and get the first token:
token = strtok( string, seps ); // C4996
// Note: strtok is deprecated; consider using strtok_s instead
while( token != NULL )
{
// While there are tokens in "string"
printf( " %s\n", token );
// Get next token:
token = strtok( NULL, seps ); // C4996
}
}