lsearch()

Выполнить линейный поиск элемента в массиве

Прототип:

#include <search.h>
void * lsearch( const void *key,
const void *base,
unsigned *num,
unsigned width,
int (*compare)( const void *element1,
const void *element2 ) );

Аргументы:

key
Объект для поиска.
base
Указатель на первый элемент в массиве.
num
Указатель на целое число, содержащее текущее количество элементов в массиве.
width
Размер элемента в байтах.
compare
Указатель на пользовательскую функцию, которую lsearch() вызывает для сравнения элемента массива с key. Аргументы функции сравнения: Функция сравнения должна возвращать 0, если element1 равен element2, или ненулевое значение, если элементы не равны.

Библиотека:

libc

Описание:

Функция lsearch() выполняет линейный поиск в массиве и возвращает указатель на массив, указывающий, где была найдена запись.


Note: Если key не найден, он добавляется в конец массива и num увеличивается на единицу.

Возвращаемое значение:

Указатель на найденный или созданный элемент или NULL, если произошла ошибка.

Примеры:

Эта программа создает массив указателей на аргументы argv, выполняя их поиск в массиве указателей NULL. Поскольку ни один из элементов не будет найден, все они будут добавлены в массив.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <search.h>
int compare( const void *, const void * );
int main( int argc, const char **argv )
{
int i;
unsigned num = 0;
char **array = (char **)calloc( argc, sizeof( char ** ) );
for ( i = 1; i < argc; ++i )
{
lsearch( &argv[i], array, &num, sizeof( char ** ), compare );
}
for ( i = 0; i < num; ++i )
{
printf( "%s\n", array[i] );
}
return (EXIT_SUCCESS);
}
int compare( const void *op1, const void *op2 )
{
const char **p1 = (const char **)op1;
const char **p2 = (const char **)op2;
return (strcmp( *p1, *p2 ));
}

Код выше использует следующий ввод:

one two one three four

Код выше генерирует следующий вывод:

$ ./a.out one two three four

Классификация:

POSIX 1003.1 X/Open Systems Interfaces Extension

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Да
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

bsearch(), lfind()




Предыдущий раздел: Описание API системной библиотеки