首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在c++中优化这段代码

如何在c++中优化这段代码
EN

Stack Overflow用户
提问于 2011-10-18 17:01:50
回答 2查看 254关注 0票数 2

我在C中有一段代码,用来删除字符串.But中的重复字符,我在两个循环中做了这件事,并希望将其优化为一个循环。

代码语言:javascript
运行
复制
void removeDuplicates(char* ptr)
{
 int end = 1;
 int length = strlen(ptr);
 int current;
 int i;
 current = 1;
 for(end=1; end<length; end++)
 {
    for(i=0; i<end; i++)
    {
        if(ptr[end] == ptr[i])
        break;
    }
    if(i == end)
    {
      ptr[current] = ptr[i];
      current++;
    }
   }
   ptr[current] = 0;
 }

 int main(int argc, char** argv)
 {
  char str[256] = {0,};
  gets(str);
  removeDuplicates(str);
  printf("%s\n", str);
  return 1;
 }

如何在一次循环中完成此操作?

EN

回答 2

Stack Overflow用户

发布于 2011-10-18 17:12:51

代码语言:javascript
运行
复制
void removeDuplicates(char* ptr)
{
    int exists[256] = {0};
    int end;
    int current = 0;
    int length = strlen(ptr);

    for(end = 0; end < length; end++)
    {
        if (exists[ptr[end]]) break;

        exists[ptr[end]] = 1;
        ptr[current++] = ptr[end];
    }

    ptr[current] = '\0';
}

int main(int argc, char** argv)
{
    char str[256] = {0,};
    gets(str);
    removeDuplicates(str);
    printf("%s\n", str);
    return 1;
}
票数 1
EN

Stack Overflow用户

发布于 2011-10-18 17:30:50

这就是我最初想做的事情。微优化,为"char seen“数组使用更少的内存,否则它的想法与其他人发布的相同。

代码语言:javascript
运行
复制
void removeDuplicates(char* src) {
    // Bitfield to remember which chars we 've seen, assumes 8-bit char type
    char bitfield[32] = { 0 }; // 32 * 8 = 256 bits

    char* dest = src; // initialize "output" ptr

    while(*src) {
        // Bitfield manipulation
        char ch = *src;
        int pos = ch >> 3; // ch / 8
        int bit = ch & 0x7; // ch % 8
        char mask = 1 << bit;

        // If char seen for first time, mark and write to "output"
        if(!(bitfield[pos] & mask)) {
            bitfield[pos] |= mask;
            *dest++ = ch;
        }
        ++src;
    }

    *dest = 0; // null terminator
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7804768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档