CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
bsearch
BSEARCH #include <search.h> требуется только для объявления функции char *bsearch(key,base,num,width,compare); char *key; ключ поиска char *base; указатель на поисковую базу данных unsigned num,width; число и размер элементов int (*compare)(); указатель на функцию сравнения Описание. Функция bsearch производит двоичный поиск в отсортированном массиве из num элементов, размер каждого элемента равен width байт. Base - указатель на начало массива, key - значение ключа поиска. Аргумент compare является указателем на процедуру, постав- ляемую пользователем, которая сравнивает два элемента массива и возвращает значение, определяющее их отношение. В течении поиска функция bsearch может вызывать процедуру compare один или нес- колько раз, передавая в каждом вызове указатели на два элемента массива. Процедура должна сравнивать элементы, а затем возвращать одно из следующих значений. ЗНАЧЕНИЕ СМЫСЛ ЗНАЧЕНИЯ меньше 0 element1 меньше, чем element2 0 element1 равен element2 больше 0 element1 больше, чем element2 Возвращаемое значение. Функция bsearch возвращает указатель на первое вхождение ключа key в массив, на который указывает base. Если key не найден, функция возвращает NULL. См. также lfind, lsearch, gsort. Пример: /* Функция bsearch производит двоичный поиск в отсортиро- ванном массиве для элемента "key" и возвращает указатель на структуру, в которой находится ключ key, или возвращает NULL, ес- ли ключа нет. */ #include <search.h> #include <string.h> #include <stdio.h> int compare(); /* должна быть объявлена как функция */ main (argc, argv) int argc; char **argv; { char **result; char *key = "PATH"; /* следующий оператор находит аргумент, начинающийся с "PATH", в предположении, что аргументы лексикографически отсорти- рованы */ result = (char **)bsearch((char *)&key, (char *)argv, argc, sizeof(char *), compare); if (result) printf ("%s found\n", *result); else printf("PATH not found!\n"); } int compare (arg1, arg2) char **arg1, **arg2; { return(strncmp(*arg1, *arg2, strlen(*arg1))); }.