|
LSEARCH(3C)НАЗВАНИЕ СИНТАКСИС #include <stdio.h> #include <search.h> char *lsearch ((char *) key, (char *) base, nelp, sizeof (*key), compar) unsigned *nelp; int (*compar) ( ); char *lfind ((char *) key, (char *) base, nelp, sizeof (*key), compar) unsigned *nelp; int (*compar) ( ); ОПИСАНИЕ Функция lsearch возвращает указатель внутрь таблицы на искомые данные. Если данные не найдены, они добавляются в конец таблицы. Аргумент key указывает на объект данных, разыскиваемый в таблице (ключ поиска). Base указывает на первый элемент таблицы. Nelp - указатель на целое, содержащее текущее количество элементов в таблице. Это целое значение увеличивается на единицу, если в таблицу добавляются данные. Compar - функция сравнения, предоставляемая пользователем (например, функция strcmp). Функция сравнения вызывается с двумя аргументами - указателями на сравниваемые элементы. Она должна возвращать нулевое значение, если элементы равны, и значение, не равное нулю, в противном случае. Функция lfind выполняет то же самое, что и функция lsearch, но не добавляет данные в таблицу при неудачном поиске, возвращая в этом случае пустой указатель NULL. ПРИМЕЧАНИЯ В сравнении, осуществляемом функцией compar, не обязательно должен участвовать каждый байт, поэтому элементы таблицы в дополнение к сравниваемым величинам могут содержать произвольные данные. Хотя функция lsearch описывается как имеющая тип "указатель на символ", возвращаемое ею значение следует преобразовывать к типу "указатель на элемент". ПРИМЕР Приведем фрагмент программы, который считывает цепочки символов в количестве, меньшем TABSIZE, и длиной, меньшей ELSIZE, и помещает прочитанные цепочки в таблицу, исключая дубликаты. #include <stdio.h> #include <search.h> #define TABSIZE 50 #define ELSIZE 120 char line [ELSIZE], tab [TABSIZE] [ELSIZE], *lsearch (); unsigned nel = 0; int strcmp (); ... while (fdets (line, ELSIZE, stdin) != NULL && nel < TABSIZE) (void) lsearch (line, (char*) tab, &nel, ELSIZE,strcmp); ... СМ. ТАКЖЕ ДИАГНОСТИКА СЮРПРИЗЫ |
|