我正在编写一个需要处理字符串(char *)的高性能函数。
这些字符串通常很长但包含重复的字符,一旦处理完字符就没有效果。
我已经实现了一个std :: set来存储已处理的字符,并在处理之前检查字符是否在集合中。
你能想到更有效的方法吗?
由于
解决方案:
我去了一个bool阵列。
bool b[256] = {0};
...
if(!b[*ci]){
b[*ci]=true;
...
}
感谢您的帮助!
答案 0 :(得分:5)
只是一个与字符数一样长的数组,并勾选数组中的字符。
答案 1 :(得分:3)
unsigned char cCheck[256];
void Process(const char* p_cInput)
{
memset(cCheck, 0, 256);
while(*p_cInput != '\0')
{
if(cCheck[*p_cInput] == 0)
cCheck[*p_cInput] = 1;
else
{
// We done
break;
}
p_cInput ++;
}
}
答案 2 :(得分:1)
您需要一个初始化为0的256位(32字节)列表,然后在看到一个字符时设置这些位。制作该数据类型的最简单方法是将其拆分为4批8字节整数,然后您可以检查字符的范围以查看要检查/写入的int。