bsearch(3)

الاسم
bsearch - بحث ثنائي لمصفوفة مرتبة

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <stdlib.h>

void *bsearch(size_t n, size_t size;
              const void key[size], const void base[size * n],
              size_t n, size_t size,
              typeof(int (const void [size], const void [size]))
                  *compar);

الوصف
الدالة bsearch() تبحث في مصفوفة من n كائن، العضو الأول منها مشار إليه بواسطة base، عن عضو يطابق الكائن المشار إليه بواسطة key. يُحدد حجم كل عضو في المصفوفة بواسطة size.

يجب أن تكون محتويات المصفوفة بترتيب تصاعدي وفقًا لدالة المقارنة المشار إليها بواسطة compar. يُتوقع من روتين compar أن يحتوي على وسيطين يشيران إلى كائن key وعضو المصفوفة، بهذا الترتيب، ويجب أن يُرجع عددًا صحيحًا أقل من، يساوي، أو أكبر من الصفر إذا وُجد كائن key، على التوالي، أقل من، يطابق، أو أكبر من عضو المصفوفة.

قيمة الإرجاع
تُرجع الدالة bsearch() مؤشرًا إلى عضو مطابق في المصفوفة، أو NULL إذا لم يُعثر على تطابق. إذا وُجدت عناصر متعددة تطابق المفتاح، فإن العنصر المُعاد غير محدد.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
bsearch() | سلامة الخيوط | MT-Safe

المعايير
C11, POSIX.1-2008.

التاريخ
POSIX.1-2001،‏ C89،‏ C99،‏ SVr4،‏ 4.3BSD.

أمثلة
المثال أدناه يرتب أولاً مصفوفة من الهياكل باستخدام qsort(3)، ثم يسترجع العناصر المطلوبة باستخدام bsearch().

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

    struct mi {
        int         nr;
        const char  *name;
    };

    static struct mi  months[] = {
        { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
        { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
        { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
    };

    static int
    compmi(const void *m1, const void *m2)
    {
        const struct mi *mi1 = m1;
        const struct mi *mi2 = m2;

        return strcmp(mi1->name, mi2->name);
    }

    int
    main(int argc, char *argv[])
    {
        qsort(months, countof(months), sizeof(months[0]), compmi);
        for (size_t i = 1; i < argc; i++) {
            struct mi key;
            struct mi *res;

            key.name = argv[i];
            res = bsearch(&key, months, countof(months),
                          sizeof(months[0]), compmi);
            if (res == NULL)
                printf("'%s': unknown month\n", argv[i]);
            else
                printf("%s: month #%d\n", res->name, res->nr);
        }
        exit(EXIT_SUCCESS);
    }

انظر أيضًا
hsearch(3), lsearch(3), qsort(3), tsearch(3)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.