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

发布于 2024-11-05 15:26:30 字数 314 浏览 1 评论 0原文

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

这些字符串通常很长,但包含重复的字符,这些重复的字符在处理完字符后就不起作用。

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

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

谢谢

解决方案:

我选择了布尔数组。

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

感谢您的帮助!

I'm writing a high performance function that needs to process a string (char *).

These strings are often very long but contain duplicate characters which have no effect once the character has been processed.

I've implemented an std::set to store the processed characters and check the character is not in the set before processing.

Is there a more efficient method you can think of?

Thanks

SOLUTION:

I went for a bool array.

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

Thanks for the help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

说不完的你爱 2024-11-12 15:26:31

只是一个与字符数一样长的数组,并勾选数组中的字符。

just an array that is as long as the number of characters and tick off the char within the array.

云巢 2024-11-12 15:26:31
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 ++;
    }
}
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 ++;
    }
}
小草泠泠 2024-11-12 15:26:31

您需要一个初始化为 0 的 256 位(32 字节)列表,然后在看到字符时设置这些位。创建该数据类型的最简单方法是将其分成 4 个 8 字节整数,然后您可以检查字符的范围以查看要检查/写入的 int。

You need a 256bit (32 byte) list that is initialised to 0, and then you set the bits as you see a character. The easiest way to make that data type would be to split it into 4 lots of 8 byte integers, and then you can check the range of the character to see which int to check/write to.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文