c - 在C中显示数组中的重复项

标签 c arrays

我目前正在使用 C 进行编程,现在我正在开发一个程序,该程序将用户输入的重复项存储在数组中并输出它们。首先,这个程序对我来说似乎很简单,但后来我意识到,尽管进行了无休止的谷歌搜索和 YouTube 教程,但我已经一周没有解决一些问题了。大多数教程都会向您展示如何删除数组或类似数组中的重复项。似乎显示它们应该与删除重复项非常相似,但我希望它们的显示方式对我来说似乎是不可能的,尽管我确信解决方案非常简单。 所以这是基本逻辑。两个 for 循环和一个比较数组的 if:

#include<stdio.h>

int main(void)
{

  int dupArray[100], newArray[100], array[100], size = 0, number = 0, i = 0, j =
      0, x = 0, y = 0, m = 0, n = 0;

  printf("How many numbers do you want to compare? ");
  scanf("%d", &size);

  for (i = 0; i < size; i++)
  {
    printf("Enter number %d", i + 1);
    printf("/%d: ", size);
    scanf("%d", &array[i]);
  }
  for (y = 0; y < size; y++)
  {
    for (j = 0; j < size; j++)
    {
      if (array[j] == array[y] && y != j)
      {

        dupArray[x] = array[j];

        printf("duplicate: %d", dupArray[x]);
        printf("\n");
        x++;
      }
    }
  }

  return 0;
}

该程序对于双数运行良好。例如,数组大小为 10,用户输入 5 5 6 3 6 7 9 0 0 4 会产生 重复:5 重复:5 重复:6 重复:6 重复:0 重复:0 然而,一旦输入超过 2 个相同的数字,程序就会输出很多相同的数字。例如: 数组大小 5。用户输入:5 1 5 6 5 重复:5 重复:5 重复:5 重复:5 重复:5 重复:5 我必须做什么才能使数字(无论输入相同数字的频率如何)仅输出一次?

最佳答案

在将数字添加到重复数组之前,您必须检查该数字是否已在重复数组中。

这张支票

if( array[j]==array[y] && y!=j )

防止比较相同索引处的数字,但不防止比较不同索引处的相同值。

应该是这样

if( array[j]==array[y] && y!=j && !InDup(dupArray, array[j], x) )
{
 ...
}

InDup()将检查元素是否在数组中:

int InDup(int *a,int num, int x)
{
size_t i;

for (i=0; i<x; i++)
if(a[i] == num) return 1;

return 0;
}

关于c - 在C中显示数组中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489339/

相关文章:

c - 另一个函数定义中的函数定义 : is it valid?

c - 使用给定顶点的数组查找三角形的面积以供用户提示

ruby - Chef 菜谱有问题

javascript - 对链接数组进行排序

java - 命令行参数和命令行参数数组的长度

python - list.pop 的 numpy 等价物?

c - C共享库函数如何学习可执行文件的路径

C - 确保用户输入的长度合适

c++ - 带有位置通知的音频流

java - 带有 switch 语句的基本数组