实现查找表以检查字符是否为字母的最简单方法是使用带有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/