CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
lfind - lsearch
LFIND - LSEARCH #include <search.h> требуется только для объявления функции char *lsearch(key,base,num,width,compare); char *lfind(key,base,num,width,compare); char *key; ключ поиска char *base; указатель на поисковую базу данных unsigned *num,width; число и размер элементов int (*compare)(); указатель на функцию сравнения Описание. Функции lsearch и lfind производят строковый поиск для зна- чения key в массиве из num элементов, каждый размером width байт. (В отличии от bsearch, lsearch и lfind не требуют отсортированно- го массива). Аргумент base является указателем на базу массива, который нужно найти. Если key не найден, lsearch присоединяет его в конец. Функ- ция lfind этого не делает. Аргумент compare является указателем на процедуру, постав- ляемую пользователем, которая сравнивает два элемента массива и возвращает значение, определяющее их отношение. Обе функции вызы- вают процедуру compare в течении поиска один или несколько раз, пересылая в каждом вызове указатели на два элемента массива. Эта процедура должна сравнивать элементы, а затем возвращать одно из следующих значений: Значение Его смысл не равно 0 element 1 и element 2 различны 0 element 1 равен element 2 Возвращаемое значение. Обе функции lsearch и lfind возвращают указатель на первое возникновение key в массиве, на который указывает base. Если key не найден, эти функции возвращают NULL. См.также bsearch. Пример: /* функция lsearch производит строковый поиск в массиве для элемента "key"; lsearch возвращает указатель на структуру, если в ней содержится 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))); }.