【问题标题】:comparing two arrays and checking a condition比较两个数组并检查条件
【发布时间】:2016-02-25 15:52:05
【问题描述】:

我正在使用 codeBlocks (C),我想比较两个数组(有 x 个数字)。每个数组由一些学生的成绩(数字,整数)组成,每个数组代表一个班级。

我想比较它们,看看它们是否有相同数量的学生具有相同的成绩。例如

[75 58 86 75 98] 
[58 75 98 86 75] 

完成目的

[75 58 86 75 98] 
[58 86 98 86 75] 

不要因为第一个班级有两次75,而第二个班级只有一次75

我知道如何比较它们,但我无法检查它们是否达到目的 谢谢

for (int i = 0; i < x; i++) {
    for(int j=0; j < x; j++){
        if ( class1 [i] == class2[j]) continue;

    }
}

【问题讨论】:

  • 1.对它们进行排序。 2.memcmp.

标签: c arrays conditional-statements codeblocks


【解决方案1】:

您应该首先对两个数组进行排序。一旦你这样做了,你可以在一个循环中比较它们,从每个循环中检索相同的数组索引。

您可以使用qsort 函数对每个数组进行排序。

【讨论】:

    【解决方案2】:

    最好的方法可能是sort 他们,这样当且仅当它们在每个位置都具有相同的值时它们才会满足您的要求(显然,如果它们具有相同的长度,但您可以检查一下甚至在排序之前)。

    看起来像这样(代码从链接的答案中大量复制)

    int comp (const void * elem1, const void * elem2) 
    {
        int f = *((int*)elem1);
        int s = *((int*)elem2);
        if (f > s) return  1;
        if (f < s) return -1;
        return 0;
    }
    

    然后当您需要检查时:

    qsort (class1, sizeof(class1)/sizeof(*class1), sizeof(*class1), comp);
    qsort (class2, sizeof(class2)/sizeof(*class2), sizeof(*class2), comp);
    
    for (int i = 0; i < x; i++) {
            if ( class1 [i] != class2[i]) return false; 
    }
    return true;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多