C-查找元素的频率失败,编号为0

时间:2019-01-07 15:55:01

标签: c arrays

我想计算数组中每个元素的频率并打印出来,但是我不想计算已经计算的数字。

下面是我的代码

int main()
{
    int i, j, n, f = 0, count = 1;
    scanf("%d", &n);

    int a[n];
    for(i = 0; i < n; i++)
        scanf("%d", &a[i]);

    for(i = 0; i < n; i++)
    {
        for(j = i + 1; j < n; j++)
        {
            if(a[i] == a[j] && a[j] != '\0')
            {
                f = 1;
                count++;
                a[j] = '\0';
            }
        }

        if(f == 1)
            printf("%d %d\n", a[i], count);
        else if(a[i] != '\0')
            printf("%d %d\n", a[i], count);

        count = 1 ; 
        f = 0;
    }
}

当我将输入作为0时,我的输出失败。例如,假设 我的输入由八个值组成

7 5 6 7 3 0 5 0

对于上述输入,我没有获得0的频率,但是对于其余元素,我的频率为

7 2                                                                                                                              
5 2                                                                                                                              
6 1                                                                                                                              
3 1 

但是对于0为什么我没有得到频率? 该如何纠正?

2 个答案:

答案 0 :(得分:0)

您的代码不适用于零的原因是您没有计算'\ 0'{if(a[i]==a[j]&&a[j]!='\0')}
中的元素 但是ascii值为NULL,即'\ 0'为0 (http://www.asciitable.com),因此您不算零,也不显示任何内容。

而不是为您访问的人保留'\ 0',而是保留一个负数(如果您不使用它的话)。

答案 1 :(得分:0)

 if(a[i]==a[j]&&a[j]!='\0')
        {
            f=1;
            count++;
            a[j]='\0';

a []是整数,您要存储转换为0的字符'\ 0'。

要解决此问题,您必须首先计算零的数量,然后计算其他数字。