CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
lsearch
lsearch
Функция Выполняет линейный поиск. Синтаксис #include<stdlib.h> 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. Смотрите также bsearch, lfind. Пример: #include<stdlib.h> #include<stdio.h> #include<string.h> /* инициализировать число цветов */ 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<ncolors; i++) printf("%s\n",colors[i]); }