实现查找表以检查字符是否为字母的最简单方法是使用带有256个字符(256个字节)的查找表?我知道我可以使用isalpha函数,但是查找表应该可以更高效,需要一个比较而不是多个比较。我正在考虑将索引与char十进制转换相对应,并直接检查char是否与之等效。

最佳答案

记住优化的第一条规则:不要这样做。

然后记住优化的第二条规则,该规则很少使用:还不要这样做。

然后,如果您确实遇到了瓶颈,并且已将isalpha确定为原因,那么根据您的库如何实现该功能,类似这样的操作可能会更快。您需要测量环境中的性能,并且只有在确实有可衡量的改进时才使用它。假设您不需要测试unsigned char范围之外的值(通常为0 ... 255);您将需要一些额外的工作。

#include <cctype>
#include <climits>

class IsAlpha
{
public:
    IsAlpha()
    {
        for (int i = 0; i <= UCHAR_MAX; ++i)
            table[i] = std::isalpha(i);
    }

    bool operator()(unsigned char i) const {return table[i];}

private:
    bool table[UCHAR_MAX+1];
};

用法:
IsAlpha isalpha;

for (int i = 0; i <= UCHAR_MAX; ++i)
    assert(isalpha(i) == bool(std::isalpha(i)));

关于c++ - C++ isalpha查找表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5727307/

10-11 22:48