计算和删除数组c中的重复项

Jullix993

假设我有一个[2,4,6,7,7,4,4]数组,我想要一个可以迭代的程序,然后打印出类似以下内容的代码:

Value:     Count:
2          1
4          3
6          1
7          2

我不希望它在ex 4上打印三遍。到目前为止,我得到的是:

for (int i = 0; i < numberOfInts; i++)
{
    dub[i] = 0;
    for (int y = 0; y < numberOfInts; y++)
    {
        if (enarray[i] == enarray[y])
        {

            dub[i]++;
        }
    }

}

因此,基本上我会对照所有元素检查数组中的每个元素,并为每个重复项在新数组dub []中的索引中添加一个。因此,如果我在上面的示例数组中运行了这段代码,然后将其打印出来,则会得到以下内容:1,3,1,2,2,3,3。这些数字非常令人困惑,因为我真的不知道这些数字属于哪个数字。尤其是当我将数组中的数字随机化时。然后我必须删除数字,所以每个数字只有一个。有人有更好的解决方案吗?

卢卡斯

您可以在检查每个元素是否重复时遍历数组,在这种情况下,您可以增加它的计数(循环仅检查节省头部时间的值)。这使您无需创建任何额外的缓冲区数组或结构即可完成所需的工作。

布尔值“ bl”可防止重复打印

int main() {

    int arr[] = { 2, 4, 6, 7, 7, 4, 4 };
    int size = (sizeof(arr) / sizeof(int));

    printf("Value:\tCount\n");
    for (int i = 0; i < size; i++) {
        int count = 0, bl = 1; //or 'true' for print
        //check elements ahead and increment count if repeated value is found 
        for (int j = i; j < size; j++) {
            if (arr[i] == arr[j]) {
                count++;
            }
        }
        //check if it has been printed already
        for (int j = i-1; j >= 0; j--) {
            if (arr[i] == arr[j]) {
                bl = 0; //print 'false'
            }
        }
        if (bl) { printf("%d\t\t%d\n", arr[i], count); } 
    }

    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章