void *lfind(const void *key, const void *base, size_t *num, size_t size, int (*compare)(const *void, const *void))
void *lsearch(const void *key, void *base, size_t *num, size_t size, int (*compare)(const *void, const *void))
Эти функции не определены стандартом ANSI С.
Функции lfind() и lsearch() выполняют линейный поиск в массиве, на который указывает параметр base, и возвращают указатель на первый элемент, соответствующий ключу, на который указывает параметр key. Число элементов в массиве определяется переменной, на которую указывает параметр num, а параметр size содержит размер каждого элемента в байтах.
Параметр compare указывает на функцию, сравнивающую элемент массива с ключом. Эта функция имеет следующий формат:
int func_name(const void *arg1, const void *arg2)
Она должна возвращать следующие значения:
Если arg1 не равен arg2, то возвращается ненулевое значение.
Если arg1 равен arg2, то возвращается 0.
Массив, в котором осуществляется поиск, не обязательно должен быть отсортированным.
Если массив не содержит искомого элемента, то возвращается нулевой указатель.
Разница между функциями lfind() и lsearch() заключается в том, что функция lfind() выполняет только поиск. В противоположность этому, функция lsearch() добавляет элемент в конец массива, если он не содержался в этом массиве.
Следующая программа читает вводимые с клавиатуры символы и определяет, принадлежат ли они алфавиту: #include <stdlib.h> #include <ctype.h> #include <stdio.h> char *alpha="abcdefghijklmnopqrstuvwxyz"; int comp (const void *, const void *); int main(void) { char ch; char *p; size_t num=26; do { printf("Enter a character: "); scanf("%c%*c", &ch); ch = tolower(ch); p = (char *) lfind(&ch, alpha, &num, 1, comp); if(p) printf("is in alphabet\n"); else printf("is not in alphabet\n"); } while(p); return 0; } /* сравнение двух символов */ int comp (const void *ch, const void *s) { return * (char *)ch - *(char *)s; }
