Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Apropos / Subsearch:
optional field

LSEARCH(3)                 Library Functions Manual                 LSEARCH(3)

       lsearch, lfind - linear search and update

       #include <&lt;stdio.h>&gt;
       #include <&lt;search.h>&gt;

       char *lsearch (key, base, nelp, width, compar)
       char *key;
       char *base;
       unsigned int *nelp;
       unsigned int width;
       int (*compar)();

       char *lfind (key, base, nelp, width, compar)
       char *key;
       char *base;
       unsigned int *nelp;
       unsigned int width;
       int (*compar)();

       lsearch() is a linear search routine generalized from Knuth (6.1) Algo-
       rithm S.  It returns a pointer into a table indicating  where  a  datum
       may  be  found.  If the datum does not occur, it is added at the end of
       the table.  key points to the datum to be sought in  the  table.   base
       points  to  the  first element in the table.  nelp points to an integer
       containing the current number of elements in the table.  The integer is
       incremented  if the datum is added to the table.  compar is the name of
       the comparison function which the user must supply (strcmp(), for exam-
       ple).  It is called with two arguments that point to the elements being
       compared.  The function must return zero if the elements are equal  and
       non-zero otherwise.

       lfind() is the same as lsearch() except that if the datum is not found,
       it is not added to the table.  Instead, a NULL pointer is returned.

       The pointers to the key and the element at the base of the table should
       be of type pointer-to-element, and cast to type pointer-to-character.

       The  comparison function need not compare every byte, so arbitrary data
       may be contained in the elements in addition to the values  being  com-

       Although  declared  as  type  pointer-to-character,  the value returned
       should be cast into type pointer-to-element.

       This fragment will read in <= TABSIZE strings of length <=  ELSIZE  and
       store them in a table, eliminating duplicates.

              #include <&lt;stdio.h>&gt;
              #include <&lt;search.h>&gt;
              TABSIZE 50
              ELSIZE 120
                   char line[ELSIZE], tab[TABSIZE][ELSIZE], *lsearch( );
                   unsigned nel = 0;
                   int strcmp( );
                   . . .
                   while (fgets(line,
                   ELSIZE, stdin) != NULL &&amp;&&amp;
                      nel <&lt; TABSIZE)
                         (void) lsearch(line, (char *)tab, &&amp;nel, ELSIZE, strcmp);
                   . . .

       bsearch(3), hsearch(3), tsearch(3)

       If the searched for datum is found, both lsearch() and lfind() return a
       pointer to it.  Otherwise, lfind() returns NULL and lsearch() returns a
       pointer to the newly added element.

       Undefined results can occur if there is not enough room in the table to
       add a new item.

                                6 October 1987                      LSEARCH(3)