在c ++字符串处理中跳过重复的字符

时间:2011-05-06 13:18:31

标签: c++ string set character

我正在编写一个需要处理字符串(char *)的高性能函数。

这些字符串通常很长但包含重复的字符,一旦处理完字符就没有效果。

我已经实现了一个std :: set来存储已处理的字符,并在处理之前检查字符是否在集合中。

你能想到更有效的方法吗?

由于

解决方案:

我去了一个bool阵列。

bool b[256] = {0};
...
if(!b[*ci]){
  b[*ci]=true;
  ...
} 

感谢您的帮助!

3 个答案:

答案 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。