c - 从 C 中的数组中查找不同的数字

标签 c arrays vector

我在 C++ 上看到了同样的问题,但我仍然不知道如何将它应用于 C,即使这两种语言非常相似。 我认为错误出在内部 for 循环的某个地方。 例如输入:v[100] = {1,2,3,3,4,1} 我期望输出:w[100] = {1,2,3 ,4}

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

int main()
{
    int v[100], w[100], n, m, i, j, distinct=1;
    printf("n= ");
    scanf("%d", &n);

    for(i=0; i<n; i++)
    {
        printf("v[%d]= ", i);
        scanf("%d", &v[i]);
    }

    for(i=0; i<n; i++)
    {
        for(j=i+1; (j<n)&&(distinct==1); j++) 
            if(v[i]==w[j])
                distinct=0;
        if(distinct==1)
        {
            w[m]=v[i];
            m++;
        }
    }
    printf("the distinct elements are: ");
    for(i=0; i<m; i++)
        printf("%d\n", w[i]);

    return 0;
}

但是这个输出是:随机数

最佳答案

您尚未将 m 的初始值设置为零 - 它未定义....

您还需要为您测试的数组的每个元素将 distinct 重置为 1。 (事实上​​你不需要变量 distinct 见下文)

您还需要更改 j 循环 - 它应该是

for(j=0; (j<m)&&(distinct==1); j++)

因为j需要遍历数组w

通过这些修复,它可以正常工作....(见下文)

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

int main()
{
    int v[100], w[100], n, m=0, i, j, distinct=1;
    printf("n= ");
    scanf("%d", &n);

for(i=0; i<n; i++)
{
    printf("v[%d]= ", i);
    scanf("%d", &v[i]);
}
 distinct=1;
for(i=0; i<n; i++)
{
    for(j=0; (j<m)&&(distinct==1); j++)
        if(v[i]==w[j])
            distinct=0;
    if(distinct==1)
    {
        w[m]=v[i];
        m++;
    }
}
printf("the distinct elements are: ");
for(i=0; i<m; i++)
    printf("%d\n", w[i]);


return 0;
}

没有 distinct - 你能看出它是如何工作的吗? (此代码也有效)

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

int main()
{
    int v[100], w[100], n, m=0, i, j;
    printf("n= ");
    scanf("%d", &n);

for(i=0; i<n; i++)
{
    printf("v[%d]= ", i);
    scanf("%d", &v[i]);
}

for(i=0; i<n; i++)
{
    for(j=0; j<m; j++)
        if(v[i]==w[j])
            break;
    if(j==m)
    {
        w[m]=v[i];
        m++;
    }
}
printf("the distinct elements are: ");
for(i=0; i<m; i++)
    printf("%d\n", w[i]);


return 0;
}

关于c - 从 C 中的数组中查找不同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577716/

相关文章:

c - 将 OpenMP 用于 XOR 密码时的加扰输出

c - Lex&YACC编译错误: expected ')' before '.' token

c - 不使用 stdarg.h 的可变长度参数

performance - 在 R 中未命名(变为命名)时对向量的分配非常慢

matlab - MATLAB 中向量的绝对值

c - 如何解释 "error C2018: unknown character ' 0x40'?

c# - 从数组中查找大写的最后一个单词

Javascript 在类似数组的表中查找字符串

arrays - Mongoose 用数组元素的条件填充嵌套数组

c++ - 尝试输入结构 vector 内的结构成员会导致段错误