Лучший способ сравнить два целых массива одинаковой длины? - PullRequest
10 голосов
/ 03 февраля 2012

Как лучше всего сравнивать массивы int b и c с a:

int a[] = {0,1,0,0,1};
int b[] = {0,1,0,0,1};
int c[] = {1,1,0,0,1};

b и c являются лишь примерами, предположим, что они могут быть любой комбинацией 0 и 1.

Я пытаюсь обнаружить массивы, идентичные a. Я гуглил это некоторое время и не нашел удовлетворительного ответа.

Это вопрос для начинающих, я понимаю, спасибо за ваше терпение.

Ответы [ 4 ]

27 голосов
/ 03 февраля 2012

Используйте стандартную функцию memcmp из <string.h>.

memcmp(a, b, sizeof(a)) == 0

, когда a и b равны.

5 голосов
/ 03 февраля 2012

Если вы имеете в виду

int a[] = {0,1,0,0,1};
int b[] = {0,1,0,0,1};
int c[] = {1,1,0,0,1};

тогда

memcmp(a, b, sizeof(a)); /* returns zero for a match */
memcmp(a, c, sizeof(a)); /* returns nonzero for no match */
4 голосов
/ 03 февраля 2012

Использование цикла и сравнение отдельных элементов один за другим.

0 голосов
/ 21 марта 2016

Требуется больше информации по вопросу ..! я могу разделить ваш вопрос двумя способами, как показано ниже,

  1. Сравнить содержимое массива с учетом порядка ?? Пример: char a [] = {a, b, c}, b [] = {a, c, b} здесь, поскольку при рассмотрении заказа содержимое не совпадает, поэтому a! = B

  1. сравнить содержимое массива независимо от порядка? Пример: char a [] = {a, b, c}, b [] = {a, c, b} здесь, если вы не учитываете порядок, содержимое такое же, поэтому a == b

Решение для вопроса № 1: для этой проблемы можно использовать memcmp. Потому что memcomp будет сравнивать лексикографическое значение и возвращать 0 или 1 или -1, как показано ниже

 #include<stdio.h>
    #include<string.h>
    int main()
    {

        char a[]={'a','b','c'};
        char b[]={'a','b','c'};
        int x=memcmp(a,b,sizeof(a));
        printf("%d\n",x);

    return 0;
    }
***output:0***

    #include<stdio.h>
    #include<string.h>
    int main()
    {

        char a[]={'a','c','b'};
        char b[]={'a','b','c'};
        int x=memcmp(a,b,sizeof(a));
        printf("%d\n",x);

    return 0;
    }
***output:1***

    #include<stdio.h>
    #include<string.h>
    int main()
    {

        char a[]={'a','b','c'};
        char b[]={''b,'a','c'};
        int x=memcmp(a,b,sizeof(a));
        printf("%d\n",x);

    return 0;
    }
***output:-1***

Решение для вопроса № 2: Для этой проблемы можно использовать memcmp. Лучшее решение этой проблемы:

здесь я ответил за вышеуказанную проблему https://stackoverflow.com/a/36130812/5206646

...