Russian Belarusian English German Japanese Ukrainian

Lsearch

CuBook05

Функция

Выполняет линейный поиск.
 
Синтаксис

#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.
 
Пример

#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]);
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий