用指针查找重复项

时间:2019-03-05 14:57:04

标签: c string pointers

#include <stdio.h>
#include<stdlib.h>

int main()
{
    int *num=malloc(sizeof(int)*10);
    int n,dup=0;
    printf("Enter number of elements");
    scanf("%d",&n);
    printf("Enter numbers");
    for(int i=0;i<n;i++)
    {
            scanf("%d",num+i);

    }

    for(int i=0;i<n;i++)
    {
        for(int j=1;j<n;j++)
        {
            if(*(num+i)==*(num+j))
            {
                    dup++;
            }

         }
         }

    printf("%d",dup);
    free(num);

    return 0;
}

我正在尝试使用指针来查找元素重复的次数。但是我没有得到正确的输出。这段代码有什么问题? 编辑:对于输入1,2,3,我的输出为2。

2 个答案:

答案 0 :(得分:2)

内循环是错误的,并且重复配对

for(int j = 1; j < n; j++)

将其更改为

for(int j = i + 1; j < n; j++)

您还应该将malloc行进一步向下移动,并以输入为基础;

int *num = malloc(sizeof(int) * n);

答案 1 :(得分:1)

如果ij相同,您将始终获得匹配。例如,如果元素2和3匹配,您还将获得重复的匹配项,因为您将2与3进行了对勾,并将3与2进行了对勾。要赶上它,请以j而不是1开头的i开始。 ,当您发现重复项时,您将希望跳出内循环,以便在有多个实例的情况下不要对它们进行多次计数。

for(int i=0;i<n;i++)
{
    for(int j=i+1;j<n;j++)
    {
        if (*(num+i)==*(num+j))
        {
                dup++;
                break;
        }
     }
 }