【问题标题】:How to compare two arrays in C programming language?如何在 C 编程语言中比较两个数组?
【发布时间】:2016-02-20 22:56:13
【问题描述】:

我想比较两个不同的数组,它们都是int。一个数组是静态的,包含从 1 到 10 的数字,第二个数组要求用户输入 10 个不同的数字,程序会检查两个数组中哪些元素相等。

#include <stdio.h>

int main(void) {
    int array1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int array2[10];
    int i;

    for (i = 0; i < 11; i++) {
        printf("Enter numbers: ");
        scanf("%d", &array2);
    }

    for (i = 0; i < 11; i++) {
        if (array1[i] != array2[i]) {
            printf("Not equal \n");
        } else {
            printf("They are equal. \n");
        }
    }
}

即使我输入的数字等于存储在第一个数组中的数字,程序也总是说不等于。

【问题讨论】:

  • 你输入了什么,你看到了什么,你期望看到什么?
  • memcmp 是一个选项。
  • 另外,每次获得输入时,您都在写入相同的 array2 索引。
  • 您访问越界 - 数组的大小为 10,因此循环条件应为 i &lt; 10,而不是 i &lt; 11。你的意思是在 scanf 行中的&amp;array2[i]

标签: c arrays


【解决方案1】:
#include <stdio.h>
int main(void) {

        int array1[] = {1,2,3,4,5,6,7,8,9,10};
        int array2[10];
        int i;

        for (i=0;i<10;i++) { //fixed the range here

                printf("Enter numbers: ");
                scanf("%d", &array2[i]); //fixed the indexing
        }

        for (i=0;i<10;i++) { //fixed the range here

                if (array1[i] != array2[i]) {

                        printf("Not equal \n");
                }
                else {
                        printf("They are equal. \n");
                }
        }
}

【讨论】:

    【解决方案2】:

    数组使用从零开始的索引。您错误地填充了array2,因此您可能希望将第一个循环更改为以下内容

        for (i=0;i<10;i++) 
        {
                printf("Enter numbers: ");
                scanf("%d", &array2[i]);
        }
    

    因为您当前的代码只是将array2 的地址作为参数传递给scanf

    然后将第二个循环条件改为

     for (i=0;i<10;i++) 
    

    在您的比较循环中,这样您就不会访问超出数组边界的项目。

    目前,您的第二个循环正在访问索引 0 到 10 处的项目 - 但 array1 中只有 10 个项目,因此您当前的代码有未定义的行为。

    【讨论】:

      【解决方案3】:
      scanf("%d", &array2);
      

      从输入中获取值时,您永远不会更新 array2 的索引。

      试试

      scanf("%d", &array2[i]);
      

      至于比较,也可以使用memcmp来比较内存:

      memcmp(array1, array2, sizeof(array1));
      

      【讨论】:

      • 想添加一些细节吗?当然,我认为位填充可能是一个问题,但我很少看到它,而且在这样的场景中也没有。
      • OP 使用 C,C 允许填充位,这会导致错误的 memcmp 结果。由于 OP 没有指定他使用的是没有填充位的平台,但发布了与 C 编程语言相关的问题。见标题和标签。 (请使用@,否则我不会阅读您的回复。)
      【解决方案4】:

      尽管我是 C 程序的初学者,但我正在尝试回应答案。

      根据上面编写的程序,您正在输入并保存值到int array2[10],它有 11 个元素。

      请记住,此数组的第一个元素的索引为零。例如:array2[0],直到它到达最后一个元素 array2[10],你已经数到了 11。

      现在array1 已写入预定义值,这些值将与您的输入值进行比较。输入您的值并将其存储到array2[]

      #include <stdio.h>
      
      int main(void) {
          int array1[] = {1,2,3,4,5,6,7,8,9,10};
          int array2[10];
          int i;
      
          for (i=0;i<10;i++) { //fixed the range here
              printf("Enter numbers: ");
              scanf("%d", &array2[i]); //fixed the indexing
      
              if (array1[i] != array2[i]) {
                  printf("Not equal \n");
              }
              else {
                  printf("They are equal. \n");
              }
          }
      }
      

      【讨论】:

      • 使用for (i=0;i&lt;(sizeof(array1)/sizeof(int));i++) 可能比for (i=0;i&lt;10;i++) 更有用
      【解决方案5】:

      我是一个初学者,我有一个关于比较两个数组的想法。希望它可以帮助像我这样的人。

      /***compare two array: all elements are same or not(if not sorted)***/
      
      #include<stdio.h>
      
      int main()
      {
          int n;
          scanf("%d", &n);
          
          int array1[n], array2[n];
          int i, j;
          
          for(i=0; i<n; i++)
          {
              scanf("%d", &array1[i]);
          }
          
          for(i=0; i<n; i++)
          {
              scanf("%d", &array2[i]);
          }
          
          int flg=0;
          for(i = 0; i < n; i++)
          {
              for(j=0; j<n; j++)
              {
                  if(array1[i] == array2[j])
                  {
                      flg += 1;
                      break;
                  }
              }
          }
          if(flg == n)
          {
              printf("All The Elements of array1 is present in array2... :)");
          }
          else
          {
              printf("All THe Elements of array1 is not present in array2 :(");
          }
          return 0;
      }
      

      【讨论】:

      • 如果任一数组中存在重复元素,这将不起作用:例如,如果数组中有 n 乘以另一个数组的第一个元素,则诊断 All The Elements of array1 is present in array2 将不正确。
      猜你喜欢
      • 2020-10-05
      • 2010-12-25
      • 2021-11-26
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多