我目前正在使用 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/