看到《编程珠玑》代码调优一章,讲到了许多调优的细节,其中就讲到了如何高效实现这一组字符判断函数,关键是以空间换时间,进行缓存,以及通过位运算加速。
下面是我的一个实现,使用到了函数对象。
#include<iostream>
#include<cstring>
using namespace std;
class Isalphanum
{
public:
char buffer[256];
char UPPER;
char LOWER;
char NUM;
Isalphanum():UPPER(0x01),LOWER(0x01<<1),NUM(0x01<<2)
{
memset(buffer,0,sizeof(buffer));
for(int i=0;i<256;++i)
{
if((i>='0')&&(i<='9'))
{
buffer[i]|=NUM;
}
if((i>='A')&&(i<='Z'))
{
buffer[i]|=UPPER;
}
if((i>='a')&&(i<='z'))
{
buffer