C 我想检查数组中的重复值

C 我想检查数组中的重复值,c,C,嗨,我真的很高兴知道这个网站的问题。我有一个问题,我做了一个数组。然后我要检查数组中的匹配值。比如说, int array[5]={1,2,4,2,5} ; 因此,值2在数组[1],数组[3]中重复。那么如何检查重复的值呢 如果是检查相同值的唯一方法,则对/使用 使用类似于: int matchCount = 0; for(int i = 0;i < (sizeof(array)/sizeof(int)); i++) { for( int j=0; j<(sizeof(ar

嗨,我真的很高兴知道这个网站的问题。我有一个问题,我做了一个数组。然后我要检查数组中的匹配值。比如说,

int array[5]={1,2,4,2,5} ;
因此,值2在
数组[1]
数组[3]
中重复。那么如何检查重复的值呢

如果是检查相同值的唯一方法,则对/
使用

使用类似于:

int matchCount = 0;
for(int i = 0;i < (sizeof(array)/sizeof(int)); i++)
{
    for( int j=0; j<(sizeof(array)/sizeof(int)); j++)
    {
        if( i != j ) // skip when both indexes point to same location
        {
            if( array[i] == array[j] )
            {
                matchCount++;
            }
        }
    }
}
int matchCount=0;
对于(int i=0;i<(sizeof(数组)/sizeof(int));i++)
{

for(int j=0;j非常合适。至少,这是做你想做的事情最简单的方法。如果你需要控制视力或类似情况,也许地图类型更适合你。

你如何使用“qsort”

“我的排序”是一个创建您自己的排序的函数。 比如说,

int my_sort( const void * a , const void * b ) {
    if( *( int * )a < *( int * )b ) {
        return -1;
    }
    else
    if( *( int * )a == *( int * )b ) {
        // You can check here.

        return 0;
    }
    return 1;
}
int my_排序(常量无效*a,常量无效*b){
如果(*(int*)a<*(int*)b){
返回-1;
}
其他的
如果(*(int*)a==*(int*)b){
//你可以在这里查一下。
返回0;
}
返回1;
}

这取决于数组中int的大小是否有界限

如果可以确保(并检查)数组中的所有元素都被限制在一个相对较小的范围内(例如,在0和255之间),则可以使用大小为MAXVAL-MINVAL的单独数组来跟踪每个元素在数组中首次出现的位置。如果是这种情况,则可以快速检查O(n)(其中n是数组的大小)是否(甚至在任何地方)都有重复的

它可能看起来像这样(注意:我还没有检查或编译这段代码)

#定义计数(x)(sizeof(x)/sizeof((x)[0]))
int i,标志[MAXVAL-MINVAL];
对于(i=0;i
sizeof(array)/sizeof(int)
->
sizeof(array)/sizeof(*array)
,忘了其他大小的类型,他说是
对于
/
如果
唯一的方法,所以我相信你应该告诉我是的,这是唯一的方法。。。
int my_sort( const void * a , const void * b ) {
    if( *( int * )a < *( int * )b ) {
        return -1;
    }
    else
    if( *( int * )a == *( int * )b ) {
        // You can check here.

        return 0;
    }
    return 1;
}
#define COUNTOF(x) ( sizeof(x) / sizeof((x)[0]) )
int i, flags[MAXVAL-MINVAL];

for(i=0; i<COUNTOF(flags); i++) flags[i]=-1; // Initialize flags to 'not found'

for(i=0; i<COUNTOF(array); i++) 
{
    if (flags[array[i]-MINVAL]!=-1)   // Duplicate value found
      printf("Value %d was found in positions %d and %d\n",array[i], i, flags[array[i]-MINVAL]);
    else  // Value had not been found before
      flags[array[i]-MINVAL]=i;  // Keep track of where first seen
}