Программирование на C и C++

Онлайн справочник программиста на C и C++

bsearch

void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compare)(const void*, const void*))

Прототип: 
Описание: 

Функция bsearch() выполняет двоичный поиск на отсортированном массиве, на который ука­зывает параметр base, и возвращает указатель на первое число, соответствующее ключу, на кото­рый указывает параметр key. Число элементов в массиве задается переменной num, а размер каж­дого элемента указывается в переменной size.

Тип size_t определен в заголовочном файле stdlib.h как unsigned int.

Функция, на которую указывает параметр compare, сравнивает элемент массива с ключом. Она должна иметь следующий прототип:
int func_name(const void *arg1, const void *arg2)

Функция обязана возвращать следующие значения:
Если arg1 меньше, чем arg2, то возвращается величина, меньшая 0.
Если arg1 равен arg2, то возвращается величина 0.
Если arg1 больше, чем arg2, то возвращается число, большее 0.

Массив должен быть отсортирован по возрастанию таким образом, что наименьший адрес со­держит наименьший элемент.

Если массив не содержит ключа, то возвращается нулевой указатель.

Пример: 
Следующая программа читает два символа с клавиатуры и определяет, принадлежат ли они алфавиту:
#include <stdio.h>
#include <stdlib.h>
#inciude <ctype.h>

char *alpha="abcdefghijklmnopqrstuvwxyz";
int comp (const void *, const void *);

int main(void)
{
char ch;
char *p;

do {
printf ("Enter a character: ");
scanf ("%c%*c", &ch);
ch = tolower(ch);
p = (char *) bsearch(&ch, alpha, 26, 1, comp);
if(p) printf("is in alphabet\n");
else printf("is not in alphabet\n");
} while(p);
return 0;
}

/* сравнение двух символов */
int comp (const void *ch, const void *s)
{
return *(char *)ch - * (char *)s;
}