Описание функций Си



         

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




Содержание  Назад  Вперед