一、 Strpbrk (string pointer break)
//
// 函 数: char * strpbrk(const char * string,const char * control)
// 功 能: 检查字符串string和control中第一个相同的字符
// 参 数:
// 返 回: 返回字符串string和control中第一个相同的字符后面的string字符串
//
char * strpbrk(const char * string,const char * control)
{
const char * str = (const char *)string;
const char * ctrl = (const char *)control;
unsigned char map[32];
int count = 0;
/*clear the map*/
memset(map,0,32*sizeof(unsigned char));
/*set bits in control map*/
while( *ctrl )
{
map[*ctrl >> 3] |= (0x01 << (*ctrl & 7));
ctrl++;
}
while ( *str )
{
if (map[*str >> 3] & (1 << (*str & 7)))
{
return((char *)str);
}
str++;
}
return(NULL);
}
//
// 例:string = "129th";
// control = "b295";
//
仔细体会下上面的代码,不禁暗暗叫绝。
1、 首先定义个大小为32个字符的map,为什么要这么划一道呢?因为在ASCII表能表示128个字符,而扩展后的ASCII却能表示256</