Lsearch
lsearch
Функция Производит линейный поиск.
Синтаксис #include
void *lsearch(const void *key, void *base, size_t num, size_t width, int(*fcmp)(const void *, const void *));
Файл, содержащий stdlib.h прототип
Описание lsearch производит просмотр таблицы. Т.к. это ли- нейный поиск, то элементы таблицы не должны быть отсортированы, перед вызовом функции lsearch. Ес- ли элемент, на который указывает key, не найден в таблице, то lsearch добавляет его к ней.
base - это указатель на базу (0-ой элемент) таб- лицы.
num - указывает на целое значение, определяющее число элементов в таблице.
key - указывает на искомый элемент.
wight- содержит размер элемента таблицы в байтах.
Аргумент fcmp указывает на программу сравнения написанную пользователем. Она должна сравнивать два элемента и возвращать результат сравнения.
При просмотре таблицы lsearch вызывает программу сравнения, на которую указывает аргумент fcmp.
При каждом вызове программы сравнения lsearch по- сылает ей два ппараметра: key - указатель на ис- комый элемент, и elem - указатель на элемент в таблице.
fcmp может интерпретировать полученные параметры любым путем.
Возвращаемое lsearch возвращает адрес первого элемента в значение таблице, совпадающего с искомым.
Если key совпадает с elem, то fcmp возвращает 0, в противном случае fcmp возвращает ненулевое зна- чение.
Переносимость lsearch доступна в системах UNIX.
Смотрите также
Пример:
#include
#include
#include
/* инициализировать число цветов */ char *color[10] = {"Red","Blue","Green"}; int ncolors = 3;
int colorscmp(char **arg1, char **arg2) { return(strcmp(*arg1,*arg2)); }
int addelem(char *color) { int oldn = ncolors; lsearch(&color, colors, (size_t*)&colors, sizeof(char*), colorscmp); return(ncolors = oldn); }
int main(void)
{ int i; char *key = "Purple";
if(addelem(key)) printf("%s уже в таблице", key); else printf("%s добавлен в таблицу цветов ", "теперь в ней %d цветов",key,ncolors); printf("Цвета:"); for(i=0; i