c - 使用 hashmap 从数组中删除重复条目

标签 c c++-cli

int main(array<System::String ^> ^args)

{

    int arr[]={1,2,3,2,9,8,1,2,3,9};
    int a[9];
    int size = sizeof(arr)/sizeof(arr[0]);
    int str[256]= {'\0'};
    int i = 0;
    for(i ; i < size ; i++)
    {
        if(str[arr[i]] == 0 )
        str[arr[i]]= 1;
    }
    for( i = 0 ; i < size ; i++)
    {
        if( str[arr[i]] == 1)
        {
            a[i] = arr[i];
        }
    }
    for(i=0 ; i < size ; i++)
    {
        printf("%d->",a[i]);

    }


    return 0;
}

仍在新数组 a 中,我正在获取旧数据...不确定这里缺少什么...

任何帮助将不胜感激。

提前致谢。

最佳答案

逻辑错误

  • 最终的数组不会到达大小
  • a 的索引错误

只需使用一个循环即可实现这一点,分析如下:

int i = 0,j=0;

for( ; i < size ; i++)
{
    if(str[arr[i]] == 0 )
    { 
        str[arr[i]]= 1;
        a[j++] = arr[i];
    }
}

现在在最终数组 a 上迭代直到 j

关于c - 使用 hashmap 从数组中删除重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27578969/

相关文章:

c - gcc 内联汇编程序定义字符串

c - #定义一个指针a->b指向另一个指针c

C++ 从 native 代码的另一种形式获取值(value)?

c# - 无效的变体崩溃

.net - 托管 C++ 方法命名

c++-cli - Xml 注释 cref 到未知符号

c - 在下面的c代码中,为什么第二个元素自动获取数组第一个元素的值

c++ - 使文件无法打开 header

c - 在 SDL 中,如果我重新渲染文本,是否需要释放表面?

C++/CLI 引发另一个对象的事件