Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ lsearch(3C) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

bsearch(3C)

hsearch(3C)

string(3C)

tsearch(3C)

lsearch(3C)                                                     lsearch(3C)

NAME
     lsearch, lfind - Linear suchen und ändern

SYNTAX
     #include <search.h>

     void *lsearch(const void *key, void * base, sizet *nelp,
               sizet width, int (*compar) (const void *, const void *));

     void *lfind(const void *key, const void *base, sizet *nelp,
               sizet width, int (*compar)(const void *, const void *));

BESCHREIBUNG
     lsearch() ist eine lineare Suchfunktion, die eine Verallgemeinerung
     des Algorithmus (6.1) S von Knuth ist. Sie gibt einen Zeiger in eine
     Tabelle zurück, der die Stelle angibt, an der ein gesuchter Wert
     gefunden wurde. Wenn der gesuchte Wert nicht auftritt, wird er am Ende
     der Tabelle eingetragen. key zeigt auf den Wert, der in der Tabelle
     gesucht werden soll. base zeigt auf das erste Element in der Tabelle.
     nelp zeigt auf eine ganze Zahl, die die aktuelle Anzahl der Elemente
     in der Tabelle enthält. Die Zahl wird erhöht, wenn der Wert zur
     Tabelle hinzugefügt wird. width ist die Größe eines Elements in Bytes.
     compar ist ein Zeiger auf die Vergleichsfunktion, die der Benutzer zur
     Verfügung stellen muß (strcmp() zum Beispiel). Es werden zwei Argu-
     mente erwartet, die auf die Elemente zeigen, die verglichen werden.
     Die Funktion gibt 0 zurück, wenn die Elemente gleich sind, sonst
     ungleich 0.

     lfind() wirkt wie lsearch(), wobei jedoch der gesuchte Wert nicht zur
     Tabelle hinzugefügt wird, wenn er nicht gefunden wird. Statt dessen
     wird ein Nullzeiger zurückgegeben.

HINWEISE
     Die Zeiger auf den Schlüssel und das Element an der Basis der Tabelle
     können Zeiger auf einen beliebigen Typ sein.

     Die Vergleichsfunktion muß nicht jedes Byte vergleichen, und so können
     die Elemente zusätzlich zu den zu vergleichenden Werten beliebige
     Daten enthalten.

     Der zurückgegebene Wert sollte sich in den Typ Zeiger-auf-Element
     umwandeln lassen.













Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

lsearch(3C)                                                     lsearch(3C)

BEISPIEL
     Das folgende Programm liest weniger als TABSIZE Zeichenketten mit
     einer Länge kleiner als ELSIZE ein, speichert sie bei gleichzeitiger
     Entfernung von Duplikaten in einer Tabelle und gibt dann jeden Eintrag
     aus.

     #include <search.h>
     #include <string.h>
     #include <stdio.h>

     #define TABSIZE 50
     #define ELSIZE 120

     ...
           char line[ELSIZE];         /* Puffer für die Eingabe */
           char tab[TABSIZE][ELSIZE]; /* Tabelle der Zeichenketten */
           sizet nel = 0;            /* Anzahl der Einträge in tab */
           ...

           while (fgets(line, ELSIZE, stdin) != NULL && nel < TABSIZE)
                   (void) lsearch(line, tab, &nel, ELSIZE,
                                  (int (*) ((const void*, const void*))
                                  strcmp);
           ...
     }

ERGEBNIS
     Wird der gesuchte Wert gefunden, geben lsearch() und lfind() einen
     Zeiger auf den Wert zurück. Andernfalls gibt lfind NULL zurück und
     lsearch() einen Zeiger auf das neu hinzugefügte Element.

     Undefinierte Ergebnisse können auftreten, wenn nicht genügend Spei-
     cherplatz für ein neues Element vorhanden ist.

SIEHE AUCH
     bsearch(3C), hsearch(3C), string(3C), tsearch(3C).


















Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026