bsearch(3)

NUME
bsearch - căutare binară a unei matrice sortate

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <stdlib.h>

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

DESCRIERE
Funcția bsearch() caută într-o matrice de obiecte nmemb, al cărei membru inițial este indicat de base, un membru care se potrivește cu obiectul indicat de key. Dimensiunea fiecărui membru al matricei este specificată de size.

Conținutul matricei ar trebui să fie în ordine crescătoare în conformitate cu funcția de comparație la care face referire compar. Se așteaptă ca rutina compar să aibă două argumente care indică obiectul key și un membru al matricei, în această ordine, și ar trebui să returneze un număr întreg mai mic, egal sau mai mare decât zero dacă obiectul key este găsit, respectiv, mai mic, egal sau mai mare decât membrul matricei.

VALOAREA RETURNATĂ
Funcția bsearch() returnează un indicator către un membru al matricei care corespunde sau NULL dacă nu se găsește nicio potrivire. În cazul în care există mai multe elemente care corespund cheii (key), elementul returnat este nespecificat.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
bsearch() | Siguranța firelor | MT-Safe

STANDARDE
C11, POSIX.1-2008.

ISTORIC
POSIX.1-2001, C89, C99, SVr4, 4.3BSD.

EXEMPLE
Exemplul de mai jos sortează mai întâi o matrice de structuri utilizând qsort(3), apoi extrage elementele dorite utilizând bsearch().

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

    #define ARRAY_SIZE(arr)  (sizeof((arr)) / sizeof((arr)[0]))

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

    static struct mi  months[] = {
        { 1, "ian" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
        { 5, "mai" }, { 6, "iun" }, { 7, "iul" }, { 8, "aug" },
        { 9, "sep" }, {10, "oct" }, {11, "noi" }, {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, ARRAY_SIZE(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, ARRAY_SIZE(months),
                          sizeof(months[0]), compmi);
            if (res == NULL)
                printf("'%s': lună necunoscută\n", argv[i]);
            else
                printf("%s: luna nr.%d\n", res->name, res->nr);
        }
        exit(EXIT_SUCCESS);
    }

CONSULTAȚI ȘI
hsearch(3), lsearch(3), qsort(3), tsearch(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.