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)));
}.
