您的位置:首页 > 其它

向前辈致敬 strspn

2013-08-12 19:44 134 查看
把8位的CHAR型数据分解为:前5位和后3位,这样2^5 = 32个CHAR型数+值就可表示所有的CHAR型数据
这样做的好处:在给出子串后,不用比较256次,最多比较32次即可判断出是否一个数在子串中
/***
*int strspn(string, control) - find init substring of control chars
*
*Purpose:
*       Finds the index of the first character in string that does belong
*       to the set of characters specified by control.  This is
*       equivalent to the length of the initial substring of string that
*       consists entirely of characters from control.  The '\0' character
*       that terminates control is not considered in the matching process.
*
*Entry:
*       char *string - string to search
*       char *control - string containing characters not to search for
*
*Exit:
*       returns index of first char in string not in control
*
*Exceptions:
*
*******************************************************************************/
int strspn(const char * string, const char * control)
{
unsigned char map[32] = {0};
size_t count;

printf("lx_strspn %s control %s\r\n", string, control);
while(*control != 0)
{
map[*control >> 3] |= (1 << (*control & 7));
control++;
}

count = 0;
while(map[*string >>3] & (1 << (*string & 7)))
{
printf("%d %d %d \r\n", *string >>3, *string & 7, map[*string >>3]);
count++;
string++;
}

return count;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: